/*
 * PainelGerenciador.java
 *
 * Created on 8 de Setembro de 2008, 11:03
 */
package br.com.cpqd.ssar.gerenciador.gui;

import br.com.cpqd.ssar.gerenciador.GerenciamentoNucleo;
import br.com.cpqd.ssar.gerenciador.Render;
import br.com.cpqd.ssar.gerenciador.RenderEixos;
import br.com.cpqd.ssar.gerenciador.RenderEvent;
import br.com.cpqd.ssar.gerenciador.RenderListener;
import br.com.cpqd.ssar.gerenciador.Status;
import br.com.cpqd.ssar.gerenciador.VerificarStatus;
import br.com.cpqd.ssar.gerenciador.VerificarStatusEvent;
import br.com.cpqd.ssar.gerenciador.VerificarStatusListener;
import br.com.cpqd.ssar.mediador.RequisicaoServicos;
import br.com.cpqd.ssar.posprocessamento.Visualizador;
import br.com.cpqd.ssar.posprocessamento.gui.JanelaInserirRelatorios;
import br.com.cpqd.ssar.utilitarias.Tijolo;
import br.com.cpqd.ssar.utilitarias.Cone;
import br.com.cpqd.ssar.utilitarias.Cilindro;
import br.com.cpqd.ssar.utilitarias.Geometria;
import br.com.cpqd.ssar.utilitarias.ListaGeometrias;
import br.com.cpqd.ssar.utilitarias.STL;
import br.com.cpqd.ssar.utilitarias.Esfera;
import br.com.cpqd.ssar.utilitarias.FonteEletromagneticaSimulacao;
import br.com.cpqd.ssar.utilitarias.RelatorioPosProcessamento;
import br.com.cpqd.ssar.utilitarias.Vertice;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.NumberFormat;
import java.util.Locale;
import java.util.Timer;
import java.util.Vector;
import javax.media.opengl.GLCanvas;
import javax.swing.JButton;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

/**
 *
 * @author  Igor José F. Freitas
 */
public class PainelGerenciador extends javax.swing.JPanel implements RenderListener, VerificarStatusListener {

    @Override
    public void objSelecionado(RenderEvent e) {

        Render r = (Render) e.getSource();
        jLabelStatus.setText("Id: " + r.getObjSelecionado());
        realcaObjSelecionado(r.getObjSelecionado());

    }

    @Override
    public void simlacaoFDTDTerminada(VerificarStatusEvent e) {
        VerificarStatus v = (VerificarStatus) e.getSource();

        // Simulação em andamento
        if (v.getStatus() == 0) {
            status.setSimulacaoEmAndamento(true);

        }
        // simulação efetuada com sucesso
        if (v.getStatus() == 1) {
            v.setStatus(0);
            status.setSimulacaoFinalizada(true);
            managementCore.getInterfaceServicos().exibirMensagemAlerta("Simulação FDTD 3D finalizada");
            statusPre.setForeground(new Color(0, 204, 102));
            statusPro.setForeground(new Color(0, 204, 102));
            statusPro.setOpaque(false);
            statusPos.setEnabled(true);
            statusPos.setForeground(new Color(255, 51, 51));
            menuItemExecutarRelatorios.setEnabled(true);

        }
        // erro na simulação
        if (v.getStatus() == 2) {
            status.setSimulacaoEmAndamento(false);
            managementCore.getInterfaceServicos().exibirMensagemErro("Erro na Simulação FDTD 3D");


        }

    }

    /**
     * Método que verifica em qual canvas (Perspectiva, Frontal, Cima e Lateral) 
     * o usuário está trabalhando. É ativado com um clique do botão esquerdo ou 
     * com as teclas "Espaço" e "Enter", no qual "Espaço" deixa o canvas atual
     * maximizado e os demais invisíveis, e o "Enter" volta ao estado de quatro 
     * telas, cada uma com seu canvas respectivo.
     * @param e - RenderEvent
     */
    @Override
    public void canvasFocus(RenderEvent e) {

        /* Funcionamento dos Recursos de Teclado e Mouse
         * 'clickMouse' indica ao Gerenciador quando o usuário clica em cima do canvas
         * e em qual canvas, assim, funções de zoom, rotação etc. podem ser aplicadas
         * ao canvas selecionado (clicado)
         * 
         * 'teclado' indica quando o usuário aperta a tecla espaço do teclado
         * para que o canvas em que ele está seja ampliado, e caso o usuário deseje
         * voltar aos 4 quadrantes, basta apertar a tecla enter, assim, a variável
         * 'teclado' será false
         * 
         * 'focus' indica em qual canvas o usuário está trabalhando, é inicializada
         * após a função 'inicializeGLCanvas'
         */

        Render r = (Render) e.getSource();
        focus = r.getCanvasFocus();
        boolean teclado = r.isTeclado();
        clickMouse = r.getClickMouse();
        objSelecionado = null;

        if (focus == 0) { //Side

            jScroolPaneGlCanvasSide.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Lateral", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 255, 255))); // NOI18N
            jScroolPaneGlCanvasFront.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Frontal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasTop.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Cima", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasPers.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Perspectiva", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N

            jScroolPaneGlCanvasSide.setBackground(new Color(102, 102, 102));
            jScroolPaneGlCanvasFront.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasTop.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasPers.setBackground(new Color(224, 223, 227));

        }
        if (focus == 1) { // Top

            jScroolPaneGlCanvasSide.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Lateral", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasFront.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Frontal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasTop.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Cima", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 255, 255))); // NOI18N
            jScroolPaneGlCanvasPers.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Perspectiva", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N

            jScroolPaneGlCanvasTop.setBackground(new Color(102, 102, 102));
            jScroolPaneGlCanvasSide.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasFront.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasPers.setBackground(new Color(224, 223, 227));

        }

        if (focus == 2) { //Front

            jScroolPaneGlCanvasSide.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Lateral", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasFront.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Frontal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 255, 255))); // NOI18N
            jScroolPaneGlCanvasTop.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Cima", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasPers.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Perspectiva", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N

            jScroolPaneGlCanvasFront.setBackground(new Color(102, 102, 102));
            jScroolPaneGlCanvasSide.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasTop.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasPers.setBackground(new Color(224, 223, 227));

        }

        if (focus == 3) { //Pers

            jScroolPaneGlCanvasSide.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Lateral", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasFront.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Frontal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasTop.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Cima", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(0, 70, 213))); // NOI18N
            jScroolPaneGlCanvasPers.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Perspectiva", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 255, 255))); // NOI18N

            jScroolPaneGlCanvasFront.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasSide.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasTop.setBackground(new Color(224, 223, 227));
            jScroolPaneGlCanvasPers.setBackground(new Color(102, 102, 102));
        }

        if ((focus == 0) && (teclado == true) && (clickMouse == 0)) {

            jScroolPaneGlCanvasSide.setVisible(true);
            jScroolPaneGlCanvasFront.setVisible(false);
            jScroolPaneGlCanvasPers.setVisible(false);
            jScroolPaneGlCanvasTop.setVisible(false);
            jSplitPaneRightScene.setDividerLocation(0);

        } else if ((focus == 1) && (teclado == true) && (clickMouse == 0)) {

            jScroolPaneGlCanvasFront.setVisible(false);
            jScroolPaneGlCanvasTop.setVisible(true);
            jScroolPaneGlCanvasPers.setVisible(false);
            jScroolPaneGlCanvasSide.setVisible(false);
            jSplitPaneRightScene.setDividerLocation(2000);
            jSplitPaneLeft.setDividerLocation(2000);

        } else if ((focus == 2) && (teclado == true) && (clickMouse == 0)) {

            jScroolPaneGlCanvasFront.setVisible(true);
            jScroolPaneGlCanvasTop.setVisible(false);
            jScroolPaneGlCanvasPers.setVisible(false);
            jScroolPaneGlCanvasSide.setVisible(false);
            jSplitPaneRightScene.setDividerLocation(2000);
            jSplitPaneLeft.setDividerLocation(0);
        } else if ((focus == 3) && (teclado == true) && (clickMouse == 0)) {

            jScroolPaneGlCanvasTop.setVisible(false);
            jScroolPaneGlCanvasFront.setVisible(false);
            jScroolPaneGlCanvasPers.setVisible(true);
            jScroolPaneGlCanvasSide.setVisible(false);
            jSplitPaneRightScene.setDividerLocation(0);
            jSplitPaneRight.setDividerLocation(0);

        } else if ((teclado == false) && (clickMouse == 0)) {

            jScroolPaneGlCanvasFront.setVisible(true);
            jScroolPaneGlCanvasPers.setVisible(true);
            jScroolPaneGlCanvasSide.setVisible(true);
            jScroolPaneGlCanvasTop.setVisible(true);
            jSplitPaneRightScene.setDividerLocation(-1);
            jSplitPaneLeft.setDividerLocation(-1);
            jSplitPaneRight.setDividerLocation(-1);
        }
        atualizaRotacaoEixos();
    }

    /**
     * Método que controla quando o usuário insere uma Geometria no GLCanvas.
     * Após a inserção, esta é verificada se está dentro do domínio computacional
     * e inserida, caso positivo, na Lista de Geometrias correspondente a seleção
     * prévia do usuário.    
     * @param e - RenderEvent
     */
    @Override
    public void geometriaInserida(RenderEvent e) {

        Render r = (Render) e.getSource();
        /* recebe geometria com atributos default da classe Render*/
        geo = r.getGeometria();

        if (managementCore.verificaLimiteComputacional(geo)) {

            /* seta o Id que o GerenciamentoNucleo controla */
            geo.setIdentificador(managementCore.getIdentificadorGeometria());
            geo.setNome(geo.getNome() + "[" + geo.getIdentificador() + "]");
            managementCore.getManagementTree().addGeometria(geo);
            managementCore.getManagementTree().updateTree();
            managementCore.getManagementTree().getTree().expandPath(path);

            /* Enviando lista de objetos atualizada para cada Render
             * renderSide = visão de lado
             * renderTop - visão de cima
             * renderPers = visão de perspectiva
             * renderFront = visão de frente
             * */
            renderSide.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
            renderTop.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
            renderFront.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
            renderPers.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
            setButtonGeometryOff();

            updateCanvas();
            /* Atualizando Status - 1 siginfica Geometria Existente */
            verificarStatusGeometria();
            /* Enviando menagem para barra de status */
            jLabelStatus.setText("Geometria criada com sucesso");
        } else {
            updateCanvas();
            managementCore.getInterfaceServicos().exibirMensagemAlerta("Geometria fora do domínio de simulação");
            jLabelStatus.setForeground(new Color(255, 0, 0));
            jLabelStatus.setText("Geometria fora do domínio de simulação");
            setButtonGeometryOff();

        }
    }

    /**
     * Metodo que recebe Coordenada da nova Fonte Eletromagnética da Simulação
     * criada pelo Mouse. 
     * @param RenderEvent - e
     */
    @Override
    public void fonteInserida(RenderEvent e) {

        Render r = (Render) e.getSource();
        float coordenadas[] = new float[3];
        /* Recebe a Coordenada da Fonte */
        coordenadas = r.getCoordenadasFonte();

        FonteEletromagneticaSimulacao fonteCriada = null;
        FonteEletromagneticaSimulacao ultimaFonte = null;
        /* Chama a Janela que atribui as caracteristicas da fonte passando como
         * parâmetro as coordenadas recebidas acima */ fonteCriada = managementCore.getInterfaceServicos().inserirFonteEletromagneticaSimulacao(coordenadas[0], coordenadas[1], coordenadas[2]);
        if (!managementCore.getManagementTree().getListaFontes().isEmpty()) {
            ultimaFonte = (FonteEletromagneticaSimulacao) managementCore.getManagementTree().getListaFontes().lastElement();
        }

        if (fonteCriada != null && fonteCriada != ultimaFonte) {
            managementCore.getManagementTree().addFonte(fonteCriada);
            managementCore.getManagementTree().updateTree();
            //managementCore.getManagementTree().getTree().expandPath(path);
            //managementCore.getManagementTree().getTree().expandRow(2);

            renderSide.setListaFonte(managementCore.getManagementTree().getListaFontes());
            renderTop.setListaFonte(managementCore.getManagementTree().getListaFontes());
            renderFront.setListaFonte(managementCore.getManagementTree().getListaFontes());
            renderPers.setListaFonte(managementCore.getManagementTree().getListaFontes());

            canvasSide.display();
            canvasTop.display();
            canvasFront.display();
            canvasPers.display();
            setButtonGeometryOff();
            updateCanvas();
            btnGerarMalha.setEnabled(status.setFonteSetada(true));
            managementCore.getManagementTree().getTree().expandRow(3);
            this.updateUI();
            jLabelStatus.setText("Fonte Eletromagnética criada com sucesso");
            fonteCriada = null;
        } else {
            jLabelStatus.setForeground(new Color(255, 0, 0));
            jLabelStatus.setText("Fonte Eletromagnética não criada");
            setButtonGeometryOff();
            updateCanvas();
            fonteCriada = null;

        }
    }

    /**
     * Creates new form PainelGerenciador
     * @param interfaceServicos
     */
    public PainelGerenciador(RequisicaoServicos interfaceServicos) {

        managementCore = new GerenciamentoNucleo(interfaceServicos);
        managementCore.getManagementTree().getTree().setExpandsSelectedPaths(true);
        managementCore.getManagementTree().getTree().setEditable(false);
        // managementCore.getManagementTree().getTree().i

        initComponents();
        inicializeGLCanvas();
        /* Somente a visão de Perspectiva não poderá criar geometrias
         * assim, ela não recebe os eventos de adição de geometrias
         */
        renderSide.addRenderListener(this);
        renderFront.addRenderListener(this);
        renderTop.addRenderListener(this);
        renderPers.addRenderListener(this);

        verificarStatus = new VerificarStatus(managementCore, status);
        verificarStatus.addRenderListener(this);

        jScrollPaneTree.setViewportView(managementCore.getManagementTree().getTree());

        managementCore.getManagementTree().getTree().addKeyListener(new KeyListener() {

            public void keyTyped(KeyEvent e) {
            }

            public void keyPressed(KeyEvent e) {


                if ((e.isControlDown()) && (e.getKeyCode() == 67)) {
                    /* CTRL + C */
                    btnCopiar.doClick();

                }

            }

            public void keyReleased(KeyEvent e) {

                if ((e.isControlDown()) && (e.getKeyCode() == 86)) {
                    /* CTRL + V */
                    btnColar.doClick();

                }

                if (e.getKeyCode() == 127) {
                    btnRemObj.doClick();
                //btnRemObj.setEnabled(false);
                }
            }
        });

        managementCore.getManagementTree().getTree().addMouseListener(new MouseListener() {

            public void mouseClicked(MouseEvent e) {

                /* se for click duplo com botao esquerdo */
                if (e.getClickCount() == 2 && e.getButton() == 1) {


                    path = managementCore.getManagementTree().getTree().getSelectionPath();

                    if (path == null) {
                        return;
                    }
                    selectedNode = (DefaultMutableTreeNode) path.getLastPathComponent();
                    objSelecionado = selectedNode.getUserObject();

                    if (objSelecionado instanceof Geometria) {
                        /* Neste caso é enviado o nó selecionado e o managementCore para que a janela de 
                         * edicao de geometrias seja capaz de chamar a interface de RequisicaoServicos
                         * que provê o método para atribuir material
                         */
                        JanelaPropriedades janelaPro = new JanelaPropriedades(objSelecionado, managementCore, new javax.swing.JFrame(), true);
                        janelaPro.setVisible(true);

                        Object objAlterado = janelaPro.getObjAlterado();
                        verificarStatusGeometria();

                        managementCore.getManagementTree().updateTree();
                        Geometria g = (Geometria) objAlterado;

                        if (g.getMaterial().getNome() != null) {
                            status.setMaterialSetado(true);
                        } else {
                            status.setMaterialSetado(false);
                        }

                        if (g.getAtributos() instanceof Esfera) {
                            setFieldsTableProSphere(g);
                            jTablePropriedadesGeometria.updateUI();
                        }
                        if (g.getAtributos() instanceof Tijolo) {
                            setFieldsTableProBrick(g);
                            jTablePropriedadesGeometria.updateUI();
                        }
                        if (g.getAtributos() instanceof Cilindro) {
                            setFieldsTableProCylinder(g);
                            jTablePropriedadesGeometria.updateUI();
                        }
                        if (g.getAtributos() instanceof Cone) {
                            setFieldsTableProCone(g);
                            jTablePropriedadesGeometria.updateUI();
                        }
                        if (g.getAtributos() instanceof STL) {
                            /* ajeitar a STL para a interface */
                            setFieldsTableProSTL(g);
                            jTablePropriedadesGeometria.updateUI();
                        }

                    } else if ((objSelecionado instanceof ListaGeometrias) && (selectedNode.getLevel() == 2)) {

                        managementCore.getManagementTree().getTree().expandRow(3);
                        JanelaPropriedades jFrameProGeometria = new JanelaPropriedades(objSelecionado, managementCore, new javax.swing.JFrame(), true);
                        jFrameProGeometria.setVisible(true);
                        managementCore.getManagementTree().getTree().expandRow(3);
                        setButtonGeometryOff();
                        setEnableBtnGeometry(false);
                        verificarStatusGeometria();
                        setFieldsTableProList(listGeometry);
                        updateCanvas();
                    /* Caso o Usuario dê dois cliques na Fonte Eletromagnética da Simulação para Edição */
                    } else if ((objSelecionado instanceof FonteEletromagneticaSimulacao) && (selectedNode.getLevel() == 2)) {

                        FonteEletromagneticaSimulacao fonte = (FonteEletromagneticaSimulacao) objSelecionado;

                        FonteEletromagneticaSimulacao fonteAntes = new FonteEletromagneticaSimulacao();
                        fonteAntes.setCor(fonte.getCor());
                        fonteAntes.setIdFonte(fonte.getIdFonte());
                        fonteAntes.setIdType(fonte.getIdType());
                        fonteAntes.setX(fonte.getX());
                        fonteAntes.setY(fonte.getY());
                        fonteAntes.setZ(fonte.getZ());
                        fonteAntes.setNome(fonte.toString());

                        managementCore.getInterfaceServicos().editarFonteEletromagneticaSimulacao(fonteAntes);

                        if (managementCore.verificaLimiteComputacional(fonteAntes)) {
                            fonte.setCor(fonteAntes.getCor());
                            fonte.setIdFonte(fonteAntes.getIdFonte());
                            fonte.setIdType(fonteAntes.getIdType());
                            fonte.setX(fonteAntes.getX());
                            fonte.setY(fonteAntes.getY());
                            fonte.setZ(fonteAntes.getZ());
                            fonte.setNome(fonteAntes.toString());

                        } else {
                            managementCore.getInterfaceServicos().exibirMensagemAlerta("Fonte fora do domínio de simulação");
                            jLabelStatus.setForeground(new Color(255, 0, 0));
                            jLabelStatus.setText("Fonte fora do domínio de simulação");
                        }

                    } else if (objSelecionado instanceof Visualizador) {

                        Visualizador v = (Visualizador) objSelecionado;
                        v.setVisible(true);

                    } else if ((objSelecionado instanceof JanelaInserirRelatorios) && (selectedNode.getLevel() == 2)) {

                        JanelaInserirRelatorios j = (JanelaInserirRelatorios) objSelecionado;
                        j.setVisible(true);

                    }

                    updateCanvas();
                    jTablePropriedadesGeometria.updateUI();
                }
                /* Se Usuário der um click com o botão esquerdo */
                if (e.getClickCount() == 1 && e.getButton() == 1) {

                    jPopupMenuGeometrias.setVisible(false);
                    jPopupMenuListaGeometrias.setVisible(false);
                    path = managementCore.getManagementTree().getTree().getSelectionPath();

                    if (path == null) {
                        return;
                    }
                    selectedNode = (DefaultMutableTreeNode) path.getLastPathComponent();
                    objSelecionado = selectedNode.getUserObject();
                    /* Usuario seleciona Nivel 2 da arvore (ListaGeometrias) */
                    if (objSelecionado instanceof ListaGeometrias) {

                        /* Desabilita botoes de Edição da Geometria */
                        setEnableBtnGeometry(true);
                        btnRemObj.setEnabled(true);
                        listGeometry = (ListaGeometrias) selectedNode.getUserObject();
                        clearFieldsJTablePropriedades();
                        checkPropriedadesVisible.setEnabled(true);
                        checkPropriedadesSolid.setEnabled(true);
                        setFieldsTableProList(listGeometry);
                    }
                    /* Se Usuario Seleciona nivel 1 (root Geometrias ou root Fontes) */
                    if (selectedNode.getLevel() == 1) {
                        setEnableBtnGeometry(false);
                        clearFieldsJTablePropriedades();
                    }
                    /* Usuarío seleciona Fonte */
                    if (objSelecionado instanceof FonteEletromagneticaSimulacao) {

                        setEnableBtnGeometry(false);
                        clearFieldsJTablePropriedades();
                        btnRemObj.setEnabled(true);
                        setFieldsTableProFonte((FonteEletromagneticaSimulacao) objSelecionado);


                    }
                    /* Usuario seleciona Nivel 1 (Geometrias) */
                    if (objSelecionado instanceof Geometria) {


                        setEnableBtnGeometry(false);
                        // btnExportarSTL.setEnabled(true);
                        btnRemObj.setEnabled(true);
                        geo = (Geometria) selectedNode.getUserObject();
                        canvasFront.display();
                        canvasSide.display();
                        canvasTop.display();
                        canvasPers.display();

                        if (geo.getAtributos() instanceof Tijolo) {
                            clearFieldsJTablePropriedades();
                            checkPropriedadesVisible.setEnabled(true);
                            checkPropriedadesSolid.setEnabled(true);
                            setFieldsTableProBrick(geo);
                        } else if (geo.getAtributos() instanceof Cone) {
                            clearFieldsJTablePropriedades();
                            checkPropriedadesVisible.setEnabled(true);
                            checkPropriedadesSolid.setEnabled(true);
                            setFieldsTableProCone(geo);
                        } else if (geo.getAtributos() instanceof Cilindro) {
                            clearFieldsJTablePropriedades();
                            checkPropriedadesVisible.setEnabled(true);
                            checkPropriedadesSolid.setEnabled(true);
                            setFieldsTableProCylinder(geo);
                        } else if (geo.getAtributos() instanceof Esfera) {
                            clearFieldsJTablePropriedades();
                            checkPropriedadesVisible.setEnabled(true);
                            checkPropriedadesSolid.setEnabled(true);
                            setFieldsTableProSphere(geo);
                        } else if (geo.getAtributos() instanceof STL) {
                            clearFieldsJTablePropriedades();
                            checkPropriedadesVisible.setEnabled(true);
                            checkPropriedadesSolid.setEnabled(true);
                            setFieldsTableProSTL(geo);
                        }
                    }
                    /* Relatorios ja gerados */
                    if (objSelecionado instanceof Visualizador) {
                        btnRemObj.setEnabled(true);
                    }

                    /* Pre-relatorios - usuario escolhe tipos de graficos antes da simulacao */
                    if (objSelecionado instanceof JanelaInserirRelatorios) {
                        btnRemObj.setEnabled(true);
                    }


                }

                /* Clique com o botão direito no menu */

                if (e.getButton() == 3) {
                    if (objSelecionado instanceof Geometria) {

                        jPopupMenuGeometrias.setVisible(true);
                        jPopupMenuGeometrias.setLocation(e.getXOnScreen() - 8, e.getYOnScreen() - 8);

                    }
                    if (objSelecionado instanceof ListaGeometrias) {

                        jPopupMenuListaGeometrias.setVisible(true);
                        jPopupMenuListaGeometrias.setLocation(e.getXOnScreen() - 8, e.getYOnScreen() - 8);

                    }
                    if (objSelecionado instanceof Visualizador) {
                        jPopupMenuRelatorios.setVisible(true);
                        jPopupMenuRelatorios.setLocation(e.getXOnScreen() - 8, e.getYOnScreen() - 8);
                    }
                    if (objSelecionado instanceof JanelaInserirRelatorios) {
                        jPopupMenuPreRelatorios.setVisible(true);
                        jPopupMenuPreRelatorios.setLocation(e.getXOnScreen() - 8, e.getYOnScreen() - 8);
                    }
                }
                updateCanvas();
                jTablePropriedadesGeometria.updateUI();


            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseReleased(MouseEvent e) {
                updateCanvas();
                jTablePropriedadesGeometria.updateUI();

            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
                updateCanvas();
                jTablePropriedadesGeometria.updateUI();
            }
        });

        nf = java.text.NumberFormat.getNumberInstance(new Locale("pt", "BR"));
        nf.setMinimumFractionDigits(2);
        nf.setMaximumFractionDigits(2);


    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu2 = new javax.swing.JMenu();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenu5 = new javax.swing.JMenu();
        jMenuBar2 = new javax.swing.JMenuBar();
        jMenu3 = new javax.swing.JMenu();
        jMenu4 = new javax.swing.JMenu();
        jPopupMenuGeometrias = new javax.swing.JPopupMenu();
        menuItemEditar = new javax.swing.JMenuItem();
        menuItemDeletar = new javax.swing.JMenuItem();
        menuItemCopiar = new javax.swing.JMenuItem();
        jPopupMenuListaGeometrias = new javax.swing.JPopupMenu();
        menuItemEditarLista = new javax.swing.JMenuItem();
        menuItemDeletarLista = new javax.swing.JMenuItem();
        menuItemColarLista = new javax.swing.JMenuItem();
        jPopupMenuRelatorios = new javax.swing.JPopupMenu();
        menuItemEditarRelatorio = new javax.swing.JMenuItem();
        menuItemDeletarRelatorio = new javax.swing.JMenuItem();
        jScrollPaneMateriais = new javax.swing.JScrollPane();
        jPopupMenuPreRelatorios = new javax.swing.JPopupMenu();
        menuItemEditarPreRelatorio = new javax.swing.JMenuItem();
        menuItemDeletarPreRelatorio = new javax.swing.JMenuItem();
        menuItemExecutarRelatorios = new javax.swing.JMenuItem();
        jToolBarGeometrias = new javax.swing.JToolBar();
        btnAddListGeometria = new javax.swing.JButton();
        btnAddSphere = new javax.swing.JButton();
        btnAddCone = new javax.swing.JButton();
        btnAddCylinder = new javax.swing.JButton();
        btnAddBrick = new javax.swing.JButton();
        btnImpStl = new javax.swing.JButton();
        btnAddMalhaPronta = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JToolBar.Separator();
        btnRemObj = new javax.swing.JButton();
        jSeparator6 = new javax.swing.JToolBar.Separator();
        btnAddFonte = new javax.swing.JButton();
        btnAddRelatoriosPos = new javax.swing.JButton();
        jSeparator3 = new javax.swing.JToolBar.Separator();
        btnGerarMalha = new javax.swing.JButton();
        jSeparator4 = new javax.swing.JToolBar.Separator();
        btnSimularFDTD = new javax.swing.JButton();
        btnFEM = new javax.swing.JButton();
        jToolBar1 = new javax.swing.JToolBar();
        btnNovo = new javax.swing.JButton();
        btnAbrir = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();
        jSeparator7 = new javax.swing.JToolBar.Separator();
        btnCopiar = new javax.swing.JButton();
        btnRecortar = new javax.swing.JButton();
        btnColar = new javax.swing.JButton();
        jSeparator8 = new javax.swing.JToolBar.Separator();
        btnAlterarGrid = new javax.swing.JButton();
        btnAlterarDominio = new javax.swing.JButton();
        jSeparator2 = new javax.swing.JToolBar.Separator();
        btnZoomMais = new javax.swing.JButton();
        btnZoomMenos = new javax.swing.JButton();
        jSeparator5 = new javax.swing.JToolBar.Separator();
        btnMoverCima = new javax.swing.JButton();
        btnMoverDireita = new javax.swing.JButton();
        btnMoverEsquerda = new javax.swing.JButton();
        btnMoverBaixo = new javax.swing.JButton();
        jToolBarAcessorios = new javax.swing.JToolBar();
        btnRotUpX = new javax.swing.JButton();
        btnRotDonwX = new javax.swing.JButton();
        bntRotRightY = new javax.swing.JButton();
        btnRotLeftY = new javax.swing.JButton();
        btnRotZMais = new javax.swing.JButton();
        btnRotZMenos = new javax.swing.JButton();
        jSplitPaneTreeScene = new javax.swing.JSplitPane();
        jScrollPaneTree = new br.com.cpqd.ssar.gerenciador.GerenciamentoArvore();
        jPanelTree = new javax.swing.JPanel();
        jSplitPaneRightScene = new javax.swing.JSplitPane();
        jSplitPaneLeft = new javax.swing.JSplitPane();
        jScroolPaneGlCanvasTop = new javax.swing.JScrollPane();
        jScroolPaneGlCanvasFront = new javax.swing.JScrollPane();
        jSplitPaneRight = new javax.swing.JSplitPane();
        jScroolPaneGlCanvasSide = new javax.swing.JScrollPane();
        jScroolPaneGlCanvasPers = new javax.swing.JScrollPane();
        jScroolPanePropriedades = new javax.swing.JScrollPane();
        jPanel2 = new javax.swing.JPanel();
        jTablePropriedadesGeometria = new javax.swing.JTable();
        checkPropriedadesVisible = new javax.swing.JCheckBox();
        checkPropriedadesSolid = new javax.swing.JCheckBox();
        jLabelStatus0 = new javax.swing.JLabel();
        jLabelStatus = new javax.swing.JLabel();
        statusPre = new javax.swing.JLabel();
        statusPro = new javax.swing.JLabel();
        statusPos = new javax.swing.JLabel();
        jLabelCoordenada = new javax.swing.JLabel();
        jScrollPaneEixos = new javax.swing.JScrollPane();

        jMenu2.setText("Edit");
        jMenuBar1.add(jMenu2);

        jMenu1.setText("File");

        jMenuItem1.setText("Item");
        jMenu1.add(jMenuItem1);

        jMenuBar1.add(jMenu1);

        jMenu5.setText("Menu");
        jMenuBar1.add(jMenu5);

        jMenu3.setText("File");
        jMenuBar2.add(jMenu3);

        jMenu4.setText("Edit");
        jMenuBar2.add(jMenu4);

        jPopupMenuGeometrias.setAutoscrolls(true);
        jPopupMenuGeometrias.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPopupMenuGeometriasMouseExited(evt);
            }
        });
        jPopupMenuGeometrias.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jPopupMenuGeometriasFocusLost(evt);
            }
        });

        menuItemEditar.setText("Editar");
        menuItemEditar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemEditarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemEditarMouseExited(evt);
            }
        });
        menuItemEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemEditarActionPerformed(evt);
            }
        });
        jPopupMenuGeometrias.add(menuItemEditar);

        menuItemDeletar.setText("Deletar");
        menuItemDeletar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemDeletarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemDeletarMouseExited(evt);
            }
        });
        menuItemDeletar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemDeletarActionPerformed(evt);
            }
        });
        jPopupMenuGeometrias.add(menuItemDeletar);

        menuItemCopiar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK));
        menuItemCopiar.setText("Copiar");
        menuItemCopiar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemCopiarMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemCopiarMouseExited(evt);
            }
        });
        menuItemCopiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemCopiarActionPerformed(evt);
            }
        });
        jPopupMenuGeometrias.add(menuItemCopiar);

        jPopupMenuListaGeometrias.setAutoscrolls(true);
        jPopupMenuListaGeometrias.setDebugGraphicsOptions(javax.swing.DebugGraphics.BUFFERED_OPTION);
        jPopupMenuListaGeometrias.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jPopupMenuListaGeometriasMouseClicked(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPopupMenuListaGeometriasMouseExited(evt);
            }
        });
        jPopupMenuListaGeometrias.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jPopupMenuListaGeometriasFocusLost(evt);
            }
        });

        menuItemEditarLista.setText("Editar");
        menuItemEditarLista.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemEditarListaMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemEditarListaMouseExited(evt);
            }
        });
        menuItemEditarLista.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemEditarListaActionPerformed(evt);
            }
        });
        jPopupMenuListaGeometrias.add(menuItemEditarLista);

        menuItemDeletarLista.setText("Deletar");
        menuItemDeletarLista.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemDeletarListaMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemDeletarListaMouseExited(evt);
            }
        });
        menuItemDeletarLista.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemDeletarListaActionPerformed(evt);
            }
        });
        jPopupMenuListaGeometrias.add(menuItemDeletarLista);

        menuItemColarLista.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK));
        menuItemColarLista.setText("Colar");
        menuItemColarLista.setEnabled(false);
        menuItemColarLista.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemColarListaMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemColarListaMouseExited(evt);
            }
        });
        menuItemColarLista.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemColarListaActionPerformed(evt);
            }
        });
        jPopupMenuListaGeometrias.add(menuItemColarLista);

        jPopupMenuRelatorios.setAutoscrolls(true);
        jPopupMenuRelatorios.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPopupMenuRelatoriosMouseExited(evt);
            }
        });
        jPopupMenuRelatorios.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jPopupMenuRelatoriosFocusLost(evt);
            }
        });

        menuItemEditarRelatorio.setText("Editar");
        menuItemEditarRelatorio.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemEditarRelatorioMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemEditarRelatorioMouseExited(evt);
            }
        });
        menuItemEditarRelatorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemEditarRelatorioActionPerformed(evt);
            }
        });
        jPopupMenuRelatorios.add(menuItemEditarRelatorio);

        menuItemDeletarRelatorio.setText("Deletar");
        menuItemDeletarRelatorio.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemDeletarRelatorioMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemDeletarRelatorioMouseExited(evt);
            }
        });
        menuItemDeletarRelatorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemDeletarRelatorioActionPerformed(evt);
            }
        });
        jPopupMenuRelatorios.add(menuItemDeletarRelatorio);

        jPopupMenuPreRelatorios.setAutoscrolls(true);
        jPopupMenuPreRelatorios.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseExited(java.awt.event.MouseEvent evt) {
                jPopupMenuPreRelatoriosMouseExited(evt);
            }
        });
        jPopupMenuPreRelatorios.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jPopupMenuPreRelatoriosFocusLost(evt);
            }
        });

        menuItemEditarPreRelatorio.setText("Editar");
        menuItemEditarPreRelatorio.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemEditarPreRelatorioMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemEditarPreRelatorioMouseExited(evt);
            }
        });
        menuItemEditarPreRelatorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemEditarPreRelatorioActionPerformed(evt);
            }
        });
        jPopupMenuPreRelatorios.add(menuItemEditarPreRelatorio);

        menuItemDeletarPreRelatorio.setText("Deletar");
        menuItemDeletarPreRelatorio.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemDeletarPreRelatorioMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemDeletarPreRelatorioMouseExited(evt);
            }
        });
        menuItemDeletarPreRelatorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemDeletarPreRelatorioActionPerformed(evt);
            }
        });
        jPopupMenuPreRelatorios.add(menuItemDeletarPreRelatorio);

        menuItemExecutarRelatorios.setText("Exibir Relatórios");
        menuItemExecutarRelatorios.setEnabled(false);
        menuItemExecutarRelatorios.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                menuItemExecutarRelatoriosMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                menuItemExecutarRelatoriosMouseExited(evt);
            }
        });
        menuItemExecutarRelatorios.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuItemExecutarRelatoriosActionPerformed(evt);
            }
        });
        jPopupMenuPreRelatorios.add(menuItemExecutarRelatorios);

        setBackground(new java.awt.Color(231, 240, 250));
        setForeground(new java.awt.Color(224, 223, 227));

        jToolBarGeometrias.setBackground(new java.awt.Color(231, 240, 250));
        jToolBarGeometrias.setRollover(true);
        jToolBarGeometrias.addAncestorListener(new javax.swing.event.AncestorListener() {
            public void ancestorMoved(javax.swing.event.AncestorEvent evt) {
            }
            public void ancestorAdded(javax.swing.event.AncestorEvent evt) {
            }
            public void ancestorRemoved(javax.swing.event.AncestorEvent evt) {
                jToolBarGeometriasAncestorRemoved(evt);
            }
        });

        btnAddListGeometria.setBackground(new java.awt.Color(231, 240, 251));
        btnAddListGeometria.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/addGeometria.gif"))); // NOI18N
        btnAddListGeometria.setToolTipText("Nova Geometria");
        btnAddListGeometria.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddListGeometriaActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddListGeometria);

        btnAddSphere.setBackground(new java.awt.Color(231, 240, 250));
        btnAddSphere.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/esfera.gif"))); // NOI18N
        btnAddSphere.setToolTipText("Esfera");
        btnAddSphere.setEnabled(false);
        btnAddSphere.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddSphereActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddSphere);

        btnAddCone.setBackground(new java.awt.Color(231, 240, 250));
        btnAddCone.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/cone.gif"))); // NOI18N
        btnAddCone.setToolTipText("Cone");
        btnAddCone.setEnabled(false);
        btnAddCone.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddConeActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddCone);

        btnAddCylinder.setBackground(new java.awt.Color(231, 240, 250));
        btnAddCylinder.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/cilindro.gif"))); // NOI18N
        btnAddCylinder.setToolTipText("Cilindro");
        btnAddCylinder.setEnabled(false);
        btnAddCylinder.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddCylinderActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddCylinder);

        btnAddBrick.setBackground(new java.awt.Color(231, 240, 250));
        btnAddBrick.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/cubo.gif"))); // NOI18N
        btnAddBrick.setToolTipText("Tijolo");
        btnAddBrick.setEnabled(false);
        btnAddBrick.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddBrickActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddBrick);

        btnImpStl.setBackground(new java.awt.Color(231, 240, 250));
        btnImpStl.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/addSTL.gif"))); // NOI18N
        btnImpStl.setToolTipText("Novo STL");
        btnImpStl.setEnabled(false);
        btnImpStl.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImpStlActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnImpStl);

        btnAddMalhaPronta.setBackground(new java.awt.Color(231, 240, 250));
        btnAddMalhaPronta.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/addMalhaPronta.gif"))); // NOI18N
        btnAddMalhaPronta.setToolTipText("Adicionar Malha de arquivo...");
        btnAddMalhaPronta.setFocusable(false);
        btnAddMalhaPronta.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAddMalhaPronta.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAddMalhaPronta.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddMalhaProntaActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddMalhaPronta);
        jToolBarGeometrias.add(jSeparator1);

        btnRemObj.setBackground(new java.awt.Color(231, 240, 250));
        btnRemObj.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/delete.gif"))); // NOI18N
        btnRemObj.setToolTipText("Remover");
        btnRemObj.setEnabled(false);
        btnRemObj.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRemObjActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnRemObj);

        jSeparator6.setBackground(new java.awt.Color(231, 240, 250));
        jToolBarGeometrias.add(jSeparator6);

        btnAddFonte.setBackground(new java.awt.Color(231, 240, 250));
        btnAddFonte.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/addFonte.gif"))); // NOI18N
        btnAddFonte.setToolTipText("Nova Fonte");
        btnAddFonte.setFocusable(false);
        btnAddFonte.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAddFonte.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAddFonte.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddFonteActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddFonte);

        btnAddRelatoriosPos.setBackground(new java.awt.Color(231, 240, 250));
        btnAddRelatoriosPos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/addRelatorios.gif"))); // NOI18N
        btnAddRelatoriosPos.setToolTipText("Selecionar Relatórios Pós-Processamento");
        btnAddRelatoriosPos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddRelatoriosPosActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnAddRelatoriosPos);
        jToolBarGeometrias.add(jSeparator3);

        btnGerarMalha.setBackground(new java.awt.Color(231, 240, 250));
        btnGerarMalha.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/addMalha.gif"))); // NOI18N
        btnGerarMalha.setToolTipText("Gerar Malha para FDTD");
        btnGerarMalha.setEnabled(false);
        btnGerarMalha.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGerarMalhaActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnGerarMalha);
        jToolBarGeometrias.add(jSeparator4);

        btnSimularFDTD.setBackground(new java.awt.Color(231, 240, 250));
        btnSimularFDTD.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/simularFDTD3D.gif"))); // NOI18N
        btnSimularFDTD.setToolTipText("Simular FDTD 3D");
        btnSimularFDTD.setEnabled(false);
        btnSimularFDTD.setFocusable(false);
        btnSimularFDTD.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnSimularFDTD.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnSimularFDTD.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSimularFDTDActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnSimularFDTD);

        btnFEM.setBackground(new java.awt.Color(231, 240, 250));
        btnFEM.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/simularFEM.gif"))); // NOI18N
        btnFEM.setToolTipText("Simular Método dos Elementos Finitos");
        btnFEM.setFocusable(false);
        btnFEM.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnFEM.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnFEM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnFEMActionPerformed(evt);
            }
        });
        jToolBarGeometrias.add(btnFEM);

        jToolBar1.setBackground(new java.awt.Color(231, 240, 250));
        jToolBar1.setRollover(true);

        btnNovo.setBackground(new java.awt.Color(231, 240, 250));
        btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/new.gif"))); // NOI18N
        btnNovo.setToolTipText("Novo Projeto");
        btnNovo.setFocusable(false);
        btnNovo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnNovo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });
        jToolBar1.add(btnNovo);

        btnAbrir.setBackground(new java.awt.Color(231, 240, 250));
        btnAbrir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/openfold.gif"))); // NOI18N
        btnAbrir.setToolTipText("Abrir Projeto");
        btnAbrir.setFocusable(false);
        btnAbrir.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAbrir.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAbrir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAbrirActionPerformed(evt);
            }
        });
        jToolBar1.add(btnAbrir);

        btnSalvar.setBackground(new java.awt.Color(231, 240, 250));
        btnSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/save.gif"))); // NOI18N
        btnSalvar.setToolTipText("Salvar Projeto");
        btnSalvar.setFocusable(false);
        btnSalvar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnSalvar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });
        jToolBar1.add(btnSalvar);
        jToolBar1.add(jSeparator7);

        btnCopiar.setBackground(new java.awt.Color(231, 240, 250));
        btnCopiar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/copy.gif"))); // NOI18N
        btnCopiar.setMnemonic('c');
        btnCopiar.setToolTipText("Copiar");
        btnCopiar.setFocusable(false);
        btnCopiar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnCopiar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnCopiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCopiarActionPerformed(evt);
            }
        });
        jToolBar1.add(btnCopiar);

        btnRecortar.setBackground(new java.awt.Color(231, 240, 250));
        btnRecortar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/cut.gif"))); // NOI18N
        btnRecortar.setToolTipText("Recortar");
        btnRecortar.setEnabled(false);
        btnRecortar.setFocusable(false);
        btnRecortar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnRecortar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btnRecortar);

        btnColar.setBackground(new java.awt.Color(231, 240, 250));
        btnColar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/paste.gif"))); // NOI18N
        btnColar.setToolTipText("Colar");
        btnColar.setEnabled(false);
        btnColar.setFocusable(false);
        btnColar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnColar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnColar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnColarActionPerformed(evt);
            }
        });
        jToolBar1.add(btnColar);
        jToolBar1.add(jSeparator8);

        btnAlterarGrid.setBackground(new java.awt.Color(231, 240, 250));
        btnAlterarGrid.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/showGrid.jpg"))); // NOI18N
        btnAlterarGrid.setToolTipText("Configurar Grade");
        btnAlterarGrid.setFocusable(false);
        btnAlterarGrid.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAlterarGrid.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAlterarGrid.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAlterarGridActionPerformed(evt);
            }
        });
        jToolBar1.add(btnAlterarGrid);

        btnAlterarDominio.setBackground(new java.awt.Color(231, 240, 250));
        btnAlterarDominio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/dominioComputacional.gif"))); // NOI18N
        btnAlterarDominio.setFocusable(false);
        btnAlterarDominio.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnAlterarDominio.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnAlterarDominio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAlterarDominioActionPerformed(evt);
            }
        });
        jToolBar1.add(btnAlterarDominio);
        jToolBar1.add(jSeparator2);

        btnZoomMais.setBackground(new java.awt.Color(231, 240, 250));
        btnZoomMais.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/zoom_in.gif"))); // NOI18N
        btnZoomMais.setToolTipText("Zoom +");
        btnZoomMais.setFocusable(false);
        btnZoomMais.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnZoomMais.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnZoomMais.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnZoomMaisActionPerformed(evt);
            }
        });
        jToolBar1.add(btnZoomMais);

        btnZoomMenos.setBackground(new java.awt.Color(231, 240, 250));
        btnZoomMenos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/zoom_out.gif"))); // NOI18N
        btnZoomMenos.setToolTipText("Zoom -");
        btnZoomMenos.setFocusable(false);
        btnZoomMenos.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnZoomMenos.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnZoomMenos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnZoomMenosActionPerformed(evt);
            }
        });
        jToolBar1.add(btnZoomMenos);
        jToolBar1.add(jSeparator5);

        btnMoverCima.setBackground(new java.awt.Color(231, 240, 250));
        btnMoverCima.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/moveUp.gif"))); // NOI18N
        btnMoverCima.setToolTipText("Mover Acima");
        btnMoverCima.setFocusable(false);
        btnMoverCima.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnMoverCima.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnMoverCima.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnMoverCimaActionPerformed(evt);
            }
        });
        jToolBar1.add(btnMoverCima);

        btnMoverDireita.setBackground(new java.awt.Color(231, 240, 250));
        btnMoverDireita.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/BArrow.gif"))); // NOI18N
        btnMoverDireita.setToolTipText("Mover a direita");
        btnMoverDireita.setFocusable(false);
        btnMoverDireita.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnMoverDireita.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnMoverDireita.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnMoverDireitaActionPerformed(evt);
            }
        });
        jToolBar1.add(btnMoverDireita);

        btnMoverEsquerda.setBackground(new java.awt.Color(231, 240, 250));
        btnMoverEsquerda.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/moveLeft.gif"))); // NOI18N
        btnMoverEsquerda.setToolTipText("Mover a esquerda");
        btnMoverEsquerda.setFocusable(false);
        btnMoverEsquerda.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnMoverEsquerda.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnMoverEsquerda.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnMoverEsquerdaActionPerformed(evt);
            }
        });
        jToolBar1.add(btnMoverEsquerda);

        btnMoverBaixo.setBackground(new java.awt.Color(231, 240, 250));
        btnMoverBaixo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/moveDown.gif"))); // NOI18N
        btnMoverBaixo.setToolTipText("Mover abaixo");
        btnMoverBaixo.setFocusable(false);
        btnMoverBaixo.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnMoverBaixo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnMoverBaixo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnMoverBaixoActionPerformed(evt);
            }
        });
        jToolBar1.add(btnMoverBaixo);

        jToolBarAcessorios.setBackground(new java.awt.Color(231, 240, 250));
        jToolBarAcessorios.setRollover(true);

        btnRotUpX.setBackground(new java.awt.Color(231, 240, 250));
        btnRotUpX.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/rot_up.gif"))); // NOI18N
        btnRotUpX.setToolTipText("Rotacionar em X");
        btnRotUpX.setFocusable(false);
        btnRotUpX.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnRotUpX.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnRotUpX.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRotUpXActionPerformed(evt);
            }
        });
        jToolBarAcessorios.add(btnRotUpX);

        btnRotDonwX.setBackground(new java.awt.Color(231, 240, 250));
        btnRotDonwX.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/rot_down.gif"))); // NOI18N
        btnRotDonwX.setToolTipText("Rotacionar em X");
        btnRotDonwX.setFocusable(false);
        btnRotDonwX.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnRotDonwX.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnRotDonwX.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRotDonwXActionPerformed(evt);
            }
        });
        jToolBarAcessorios.add(btnRotDonwX);

        bntRotRightY.setBackground(new java.awt.Color(231, 240, 250));
        bntRotRightY.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/rotYmais.gif"))); // NOI18N
        bntRotRightY.setToolTipText("Rotacionar em Y");
        bntRotRightY.setFocusable(false);
        bntRotRightY.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        bntRotRightY.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        bntRotRightY.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bntRotRightYActionPerformed(evt);
            }
        });
        jToolBarAcessorios.add(bntRotRightY);

        btnRotLeftY.setBackground(new java.awt.Color(231, 240, 250));
        btnRotLeftY.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/rotYmenos.gif"))); // NOI18N
        btnRotLeftY.setToolTipText("Rotacionar em Y");
        btnRotLeftY.setFocusable(false);
        btnRotLeftY.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnRotLeftY.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnRotLeftY.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRotLeftYActionPerformed(evt);
            }
        });
        jToolBarAcessorios.add(btnRotLeftY);

        btnRotZMais.setBackground(new java.awt.Color(231, 240, 250));
        btnRotZMais.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/rotZmais.gif"))); // NOI18N
        btnRotZMais.setToolTipText("Rotacionar em Z");
        btnRotZMais.setFocusable(false);
        btnRotZMais.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnRotZMais.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnRotZMais.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRotZMaisActionPerformed(evt);
            }
        });
        jToolBarAcessorios.add(btnRotZMais);

        btnRotZMenos.setBackground(new java.awt.Color(231, 240, 250));
        btnRotZMenos.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/cpqd/ssar/gerenciador/gui/recursos/rotZmenos.gif"))); // NOI18N
        btnRotZMenos.setToolTipText("Rotacionar em Z");
        btnRotZMenos.setFocusable(false);
        btnRotZMenos.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btnRotZMenos.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnRotZMenos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRotZMenosActionPerformed(evt);
            }
        });
        jToolBarAcessorios.add(btnRotZMenos);

        jSplitPaneTreeScene.setBackground(new java.awt.Color(231, 240, 250));
        jSplitPaneTreeScene.setBorder(javax.swing.BorderFactory.createTitledBorder("Gerenciador"));
        jSplitPaneTreeScene.setDividerLocation(230);
        jSplitPaneTreeScene.setDividerSize(8);
        jSplitPaneTreeScene.setOneTouchExpandable(true);
        jSplitPaneTreeScene.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                jSplitPaneTreeSceneComponentResized(evt);
            }
        });

        jScrollPaneTree.setAutoscrolls(true);

        jPanelTree.setBackground(new java.awt.Color(231, 240, 250));
        jPanelTree.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanelTree.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                jPanelTreeMouseEntered(evt);
            }
        });

        javax.swing.GroupLayout jPanelTreeLayout = new javax.swing.GroupLayout(jPanelTree);
        jPanelTree.setLayout(jPanelTreeLayout);
        jPanelTreeLayout.setHorizontalGroup(
            jPanelTreeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 458, Short.MAX_VALUE)
        );
        jPanelTreeLayout.setVerticalGroup(
            jPanelTreeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 403, Short.MAX_VALUE)
        );

        jScrollPaneTree.setViewportView(jPanelTree);

        jSplitPaneTreeScene.setLeftComponent(jScrollPaneTree);

        jSplitPaneRightScene.setDividerSize(7);
        jSplitPaneRightScene.setResizeWeight(0.5);
        jSplitPaneRightScene.setOneTouchExpandable(true);
        jSplitPaneRightScene.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightSceneComponentHidden(evt);
            }
            public void componentMoved(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightSceneComponentMoved(evt);
            }
            public void componentResized(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightSceneComponentResized(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightSceneComponentShown(evt);
            }
        });
        jSplitPaneRightScene.addHierarchyBoundsListener(new java.awt.event.HierarchyBoundsListener() {
            public void ancestorMoved(java.awt.event.HierarchyEvent evt) {
            }
            public void ancestorResized(java.awt.event.HierarchyEvent evt) {
                jSplitPaneRightSceneAncestorResized(evt);
            }
        });

        jSplitPaneLeft.setDividerSize(7);
        jSplitPaneLeft.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        jSplitPaneLeft.setResizeWeight(0.5);
        jSplitPaneLeft.setOneTouchExpandable(true);
        jSplitPaneLeft.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                jSplitPaneLeftComponentHidden(evt);
            }
            public void componentMoved(java.awt.event.ComponentEvent evt) {
                jSplitPaneLeftComponentMoved(evt);
            }
            public void componentResized(java.awt.event.ComponentEvent evt) {
                jSplitPaneLeftComponentResized(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                jSplitPaneLeftComponentShown(evt);
            }
        });

        jScroolPaneGlCanvasTop.setBackground(new java.awt.Color(231, 240, 250));
        jScroolPaneGlCanvasTop.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Cima", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 255, 255))); // NOI18N
        jScroolPaneGlCanvasTop.setAutoscrolls(true);
        jScroolPaneGlCanvasTop.setMinimumSize(null);
        jScroolPaneGlCanvasTop.setPreferredSize(null);
        jScroolPaneGlCanvasTop.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                keyOnCanvas(evt);
            }
        });
        jSplitPaneLeft.setLeftComponent(jScroolPaneGlCanvasTop);

        jScroolPaneGlCanvasFront.setBackground(new java.awt.Color(231, 240, 250));
        jScroolPaneGlCanvasFront.setBorder(javax.swing.BorderFactory.createTitledBorder("Frontal"));
        jScroolPaneGlCanvasFront.setAutoscrolls(true);
        jScroolPaneGlCanvasFront.setMinimumSize(null);
        jScroolPaneGlCanvasFront.setPreferredSize(null);
        jScroolPaneGlCanvasFront.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                keyOnCanvas(evt);
            }
        });
        jSplitPaneLeft.setRightComponent(jScroolPaneGlCanvasFront);

        jSplitPaneRightScene.setLeftComponent(jSplitPaneLeft);

        jSplitPaneRight.setDividerSize(7);
        jSplitPaneRight.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
        jSplitPaneRight.setResizeWeight(0.5);
        jSplitPaneRight.setOneTouchExpandable(true);

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, jSplitPaneLeft, org.jdesktop.beansbinding.ELProperty.create("${dividerLocation}"), jSplitPaneRight, org.jdesktop.beansbinding.BeanProperty.create("dividerLocation"));
        bindingGroup.addBinding(binding);

        jSplitPaneRight.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightComponentHidden(evt);
            }
            public void componentMoved(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightComponentMoved(evt);
            }
            public void componentResized(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightComponentResized(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                jSplitPaneRightComponentShown(evt);
            }
        });
        jSplitPaneRight.addInputMethodListener(new java.awt.event.InputMethodListener() {
            public void caretPositionChanged(java.awt.event.InputMethodEvent evt) {
                jSplitPaneRightCaretPositionChanged(evt);
            }
            public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) {
            }
        });
        jSplitPaneRight.addAncestorListener(new javax.swing.event.AncestorListener() {
            public void ancestorMoved(javax.swing.event.AncestorEvent evt) {
                jSplitPaneRightAncestorMoved(evt);
            }
            public void ancestorAdded(javax.swing.event.AncestorEvent evt) {
            }
            public void ancestorRemoved(javax.swing.event.AncestorEvent evt) {
            }
        });

        jScroolPaneGlCanvasSide.setBackground(new java.awt.Color(231, 240, 250));
        jScroolPaneGlCanvasSide.setBorder(javax.swing.BorderFactory.createTitledBorder("Lateral"));
        jScroolPaneGlCanvasSide.setAutoscrolls(true);
        jScroolPaneGlCanvasSide.setMinimumSize(null);
        jScroolPaneGlCanvasSide.setPreferredSize(null);
        jScroolPaneGlCanvasSide.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                keyOnCanvas(evt);
            }
        });
        jSplitPaneRight.setLeftComponent(jScroolPaneGlCanvasSide);

        jScroolPaneGlCanvasPers.setBackground(new java.awt.Color(231, 240, 250));
        jScroolPaneGlCanvasPers.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Perspectiva - Não editável", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 11), new java.awt.Color(255, 0, 51))); // NOI18N
        jScroolPaneGlCanvasPers.setAutoscrolls(true);
        jScroolPaneGlCanvasPers.setMinimumSize(null);
        jScroolPaneGlCanvasPers.setPreferredSize(null);
        jSplitPaneRight.setRightComponent(jScroolPaneGlCanvasPers);

        jSplitPaneRightScene.setRightComponent(jSplitPaneRight);

        jSplitPaneTreeScene.setRightComponent(jSplitPaneRightScene);

        jScroolPanePropriedades.setBackground(new java.awt.Color(231, 240, 250));
        jScroolPanePropriedades.setBorder(javax.swing.BorderFactory.createTitledBorder("Propriedades"));
        jScroolPanePropriedades.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        jScroolPanePropriedades.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

        jPanel2.setBackground(new java.awt.Color(231, 240, 250));

        jTablePropriedadesGeometria.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jTablePropriedadesGeometria.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null},
                {null, null}
            },
            new String [] {
                "Nome", "Valor"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, true
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTablePropriedadesGeometria.setAlignmentY(0.6F);
        jTablePropriedadesGeometria.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN);
        jTablePropriedadesGeometria.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTablePropriedadesGeometriaKeyReleased(evt);
            }
        });

        checkPropriedadesVisible.setBackground(new java.awt.Color(231, 240, 250));
        checkPropriedadesVisible.setText("Visível");
        checkPropriedadesVisible.setEnabled(false);
        checkPropriedadesVisible.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                checkPropriedadesVisibleActionPerformed(evt);
            }
        });

        checkPropriedadesSolid.setBackground(new java.awt.Color(231, 240, 250));
        checkPropriedadesSolid.setText("Sólido");
        checkPropriedadesSolid.setEnabled(false);
        checkPropriedadesSolid.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                checkPropriedadesSolidActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(checkPropriedadesVisible)
                        .addGap(6, 6, 6)
                        .addComponent(checkPropriedadesSolid))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jTablePropriedadesGeometria, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(1022, Short.MAX_VALUE))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addComponent(jTablePropriedadesGeometria, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(checkPropriedadesSolid)
                    .addComponent(checkPropriedadesVisible))
                .addGap(828, 828, 828))
        );

        jScroolPanePropriedades.setViewportView(jPanel2);

        jLabelStatus0.setBackground(new java.awt.Color(255, 255, 255));
        jLabelStatus0.setText("Status:");
        jLabelStatus0.setBorder(javax.swing.BorderFactory.createEtchedBorder(java.awt.SystemColor.activeCaption, java.awt.SystemColor.text));
        jLabelStatus0.setName("jLabelStatus"); // NOI18N

        jLabelStatus.setBackground(new java.awt.Color(255, 255, 255));
        jLabelStatus.setAutoscrolls(true);
        jLabelStatus.setBorder(javax.swing.BorderFactory.createEtchedBorder(java.awt.SystemColor.activeCaption, java.awt.SystemColor.text));
        jLabelStatus.setName("jLabelStatus"); // NOI18N

        statusPre.setBackground(new java.awt.Color(255, 51, 51));
        statusPre.setFont(new java.awt.Font("Tahoma", 1, 10));
        statusPre.setForeground(new java.awt.Color(255, 255, 255));
        statusPre.setText(" Pré-Processamento");
        statusPre.setAlignmentX(0.5F);
        statusPre.setAutoscrolls(true);
        statusPre.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        statusPre.setName("jLabelStatus"); // NOI18N
        statusPre.setOpaque(true);

        statusPro.setBackground(new java.awt.Color(102, 102, 255));
        statusPro.setFont(new java.awt.Font("Tahoma", 1, 10));
        statusPro.setForeground(new java.awt.Color(0, 204, 0));
        statusPro.setText(" Processamento");
        statusPro.setAlignmentX(0.5F);
        statusPro.setAutoscrolls(true);
        statusPro.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        statusPro.setEnabled(false);
        statusPro.setName("jLabelStatus"); // NOI18N

        statusPos.setBackground(new java.awt.Color(102, 102, 255));
        statusPos.setFont(new java.awt.Font("Tahoma", 1, 10));
        statusPos.setForeground(new java.awt.Color(102, 102, 255));
        statusPos.setText("  Pós-Processamento");
        statusPos.setAlignmentX(0.5F);
        statusPos.setAutoscrolls(true);
        statusPos.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        statusPos.setEnabled(false);
        statusPos.setName("jLabelStatus"); // NOI18N

        jLabelCoordenada.setBackground(new java.awt.Color(255, 255, 255));
        jLabelCoordenada.setText("x:000,00 y:000,00");
        jLabelCoordenada.setAutoscrolls(true);
        jLabelCoordenada.setBorder(javax.swing.BorderFactory.createEtchedBorder(java.awt.SystemColor.activeCaption, java.awt.SystemColor.text));
        jLabelCoordenada.setName("jLabelStatus"); // NOI18N

        jScrollPaneEixos.setBackground(new java.awt.Color(231, 240, 250));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jToolBarGeometrias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jToolBarAcessorios, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jSplitPaneTreeScene, javax.swing.GroupLayout.DEFAULT_SIZE, 612, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabelStatus0, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabelCoordenada, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(statusPre)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(statusPro, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(statusPos)))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jScrollPaneEixos)
                            .addComponent(jScroolPanePropriedades, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(14, 14, 14)
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jToolBarGeometrias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jToolBarAcessorios, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jSplitPaneTreeScene, javax.swing.GroupLayout.DEFAULT_SIZE, 451, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScroolPanePropriedades, javax.swing.GroupLayout.PREFERRED_SIZE, 293, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPaneEixos, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabelStatus0, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabelStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(statusPro, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(statusPre, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(statusPos, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabelCoordenada, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        bindingGroup.bind();
    }// </editor-fold>//GEN-END:initComponents
    private void btnAddListGeometriaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddListGeometriaActionPerformed
        /* cria geometria a partir do modelador basico
        chamada para o metodo da interface do rafael */
        managementCore.novaListaGeometrias();
        /* expande o nível 2, que se refere a "Geometrias" na árvore */
        managementCore.getManagementTree().getTree().expandRow(2);
        jLabelStatus.setText("Elemento criado com sucesso");
}//GEN-LAST:event_btnAddListGeometriaActionPerformed

    /**
     * Metodo que desabilita a edição de Geometrias nos quatro Canvas
     */
    private void setButtonGeometryOff() {
        renderSide.setConfirmar(false);
        renderSide.setClickEsfera(0);
        renderSide.setClickCone(0);
        renderSide.setClickBrick(0);
        renderSide.setClickCilindro(0);
        renderSide.setClickLine(0);
        renderSide.setClickFonte(0);

        renderFront.setConfirmar(false);
        renderFront.setClickEsfera(0);
        renderFront.setClickCone(0);
        renderFront.setClickBrick(0);
        renderFront.setClickCilindro(0);
        renderFront.setClickLine(0);
        renderFront.setClickFonte(0);

        renderTop.setConfirmar(false);
        renderTop.setClickEsfera(0);
        renderTop.setClickCone(0);
        renderTop.setClickBrick(0);
        renderTop.setClickCilindro(0);
        renderTop.setClickLine(0);
        renderTop.setClickFonte(0);

        renderPers.setConfirmar(false);
        renderPers.setClickEsfera(0);
        renderPers.setClickCone(0);
        renderPers.setClickBrick(0);
        renderPers.setClickCilindro(0);
        renderPers.setClickLine(0);
        renderPers.setClickFonte(0);

        updateCanvas();

    }

    private void btnImpStlActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImpStlActionPerformed
        // TODO add your handling code here:

        Geometria stl = managementCore.novoSTL();
        if (stl == null) {
            jLabelStatus.setText("STL não selecionado");
        } else {

            if (managementCore.verificaLimiteComputacional(stl)) {

                managementCore.getManagementTree().addGeometria(stl);
                managementCore.getManagementTree().updateTree();
                managementCore.getManagementTree().getTree().expandRow(3);
                btnGerarMalha.setEnabled(status.setGeometriaInserida(true));
                jLabelStatus.setText("STL importado");
            } else {
                managementCore.getInterfaceServicos().exibirMensagemErro("STL fora do domínio computacional");
                jLabelStatus.setText("STL fora do domínio computacional");

            }

        }


}//GEN-LAST:event_btnImpStlActionPerformed

    public void realcaObjSelecionado(int id) {

        /* Pega objeto pelo id */
        for (int i = 0; i < managementCore.getManagementTree().getListaGeometrias().size(); i++) {

            ListaGeometrias list = (ListaGeometrias) managementCore.getManagementTree().getListaGeometrias().get(i);

            for (int j = 0; j < list.getGeo().size(); j++) {

                Geometria obj = (Geometria) list.getGeo().get(j);

                if (obj.getIdentificador() == id) {
                    obj.getMaterial().setCor(new Color(105, 120, 233));
                    renderFront.setSelecao();
                    renderPers.setSelecao();
                    renderSide.setSelecao();
                    renderTop.setSelecao();
                    System.out.println("reaca obj selecionado");
                    updateCanvas();

                }
            }
        }
    }

    private void btnAddSphereActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddSphereActionPerformed
        // TODO add your handling code here:

        renderSide.setConfirmar(true);
        renderSide.setClickEsfera(1);
        renderSide.setClickCone(0);
        renderSide.setClickBrick(0);
        renderSide.setClickCilindro(0);
        renderSide.setClickLine(0);
        renderSide.setClickFonte(0);
        canvasSide.display();

        renderFront.setConfirmar(true);
        renderFront.setClickEsfera(1);
        renderFront.setClickCone(0);
        renderFront.setClickBrick(0);
        renderFront.setClickCilindro(0);
        renderFront.setClickLine(0);
        renderFront.setClickFonte(0);
        canvasFront.display();

        renderTop.setConfirmar(true);
        renderTop.setClickEsfera(1);
        renderTop.setClickCone(0);
        renderTop.setClickBrick(0);
        renderTop.setClickCilindro(0);
        renderTop.setClickLine(0);
        renderTop.setClickFonte(0);
        canvasTop.display();

        renderPers.setConfirmar(true);
        renderPers.setClickEsfera(1);
        renderPers.setClickCone(0);
        renderPers.setClickBrick(0);
        renderPers.setClickCilindro(0);
        renderPers.setClickLine(0);
        renderPers.setClickFonte(0);
        canvasPers.display();


        canvasPers.display();
    }//GEN-LAST:event_btnAddSphereActionPerformed

    private void btnAddConeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddConeActionPerformed
        // TODO add your handling code here:

        renderSide.setConfirmar(true);
        renderSide.setClickEsfera(0);
        renderSide.setClickCone(1);
        renderSide.setClickBrick(0);
        renderSide.setClickCilindro(0);
        renderSide.setClickLine(0);
        renderSide.setClickFonte(0);
        canvasSide.display();

        renderFront.setConfirmar(true);
        renderFront.setClickEsfera(0);
        renderFront.setClickCone(1);
        renderFront.setClickBrick(0);
        renderFront.setClickCilindro(0);
        renderFront.setClickLine(0);
        renderFront.setClickFonte(0);
        canvasFront.display();

        renderTop.setConfirmar(true);
        renderTop.setClickEsfera(0);
        renderTop.setClickCone(1);
        renderTop.setClickBrick(0);
        renderTop.setClickCilindro(0);
        renderTop.setClickLine(0);
        renderTop.setClickFonte(0);
        canvasTop.display();

        renderPers.setConfirmar(true);
        renderPers.setClickEsfera(0);
        renderPers.setClickCone(1);
        renderPers.setClickBrick(0);
        renderPers.setClickCilindro(0);
        renderPers.setClickLine(0);
        renderPers.setClickFonte(0);
        canvasPers.display();


        canvasPers.display();
    }//GEN-LAST:event_btnAddConeActionPerformed

    private void btnAddCylinderActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddCylinderActionPerformed
        // TODO add your handling code here:

        renderSide.setConfirmar(true);
        renderSide.setClickEsfera(0);
        renderSide.setClickCone(0);
        renderSide.setClickBrick(0);
        renderSide.setClickCilindro(1);
        renderSide.setClickLine(0);
        canvasSide.display();

        renderFront.setConfirmar(true);
        renderFront.setClickEsfera(0);
        renderFront.setClickCone(0);
        renderFront.setClickBrick(0);
        renderFront.setClickCilindro(1);
        renderFront.setClickLine(0);
        canvasFront.display();

        renderTop.setConfirmar(true);
        renderTop.setClickEsfera(0);
        renderTop.setClickCone(0);
        renderTop.setClickBrick(0);
        renderTop.setClickCilindro(1);
        renderTop.setClickLine(0);
        canvasTop.display();

        renderPers.setConfirmar(true);
        renderPers.setClickEsfera(0);
        renderPers.setClickCone(0);
        renderPers.setClickBrick(0);
        renderPers.setClickCilindro(1);
        renderPers.setClickLine(0);
        canvasPers.display();


        canvasPers.display();
    }//GEN-LAST:event_btnAddCylinderActionPerformed

    private void btnRemObjActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRemObjActionPerformed
        // TODO add your handling code here:
    /* verifica se a remocao foi feita */ //        selectedNode = (DefaultMutableTreeNode) path.getLastPathComponent();
        //        objSelecionado = selectedNode.getUserObject();

        if (managementCore.getManagementTree().remObjSelecionado()) {

            if (objSelecionado instanceof FonteEletromagneticaSimulacao) {

                if (managementCore.getInterfaceServicos().removerFonteEletromagneticaSimulacao((FonteEletromagneticaSimulacao) objSelecionado)) {

                    /* Setando o status da simulacao para fontes eletromagneticas */
                    if (managementCore.getManagementTree().getListaFontes().isEmpty()) {
                        btnGerarMalha.setEnabled(status.setFonteSetada(false));
                        btnSimularFDTD.setEnabled(status.isMalhaEfetuada());

                    } else {
                        btnGerarMalha.setEnabled(status.setFonteSetada(true));
                        btnSimularFDTD.setEnabled(status.isMalhaEfetuada());

                    }
                    updateCanvas();

                }
            } else {
                clearFieldsJTablePropriedades();
                updateCanvas();
                verificarStatusGeometria();
                setEnableBtnGeometry(false);
            }
            updateCanvas();
        }


    }//GEN-LAST:event_btnRemObjActionPerformed

    private void updateCanvas() {

        renderSide.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
        renderTop.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
        renderFront.setListGeometry(managementCore.getManagementTree().getListaGeometrias());
        renderPers.setListGeometry(managementCore.getManagementTree().getListaGeometrias());

        renderSide.setListaFonte(managementCore.getManagementTree().getListaFontes());
        renderTop.setListaFonte(managementCore.getManagementTree().getListaFontes());
        renderFront.setListaFonte(managementCore.getManagementTree().getListaFontes());
        renderPers.setListaFonte(managementCore.getManagementTree().getListaFontes());

        managementCore.getManagementTree().updateTree();
        canvasSide.display();
        canvasPers.display();
        canvasTop.display();
        canvasFront.display();


    }

    private void jTablePropriedadesGeometriaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTablePropriedadesGeometriaKeyReleased
        // TODO add your handling code here:
    /* Usuário edita na tabela propriedades da lista de geometrias 
         * - Objeto ListaGeometrias */
        if (selectedNode.getUserObject() instanceof ListaGeometrias) {

            ListaGeometrias l = (ListaGeometrias) selectedNode.getUserObject();
            /* altera o nome da Geometria somente se este for alterado, se o usuário
             * alterar o ID que não é permitido nada acontece 
             */
            if (jTablePropriedadesGeometria.getValueAt(1, 1) != l.getName()) {

                l.setName(jTablePropriedadesGeometria.getValueAt(1, 1).toString());
                /* atualiza objeto (ListaGeometrias) */
                managementCore.getManagementTree().atualizaListaGeometrias(l);

            }

            /* Alterando a Visiblidade */
            if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(3, 1).toString()) != l.getVisibilidade()) {

                float visibilidade = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(3, 1).toString()) / 100;

                l.setVisibilidade(visibilidade);
                managementCore.getManagementTree().atualizaListaGeometrias(l);
                managementCore.getManagementTree().updateTree();
                updateCanvas();

            }

        }

        /* Usuário edita na tabela propriedades da geometria - Objeto Geometry */
        if (selectedNode.getUserObject() instanceof Geometria) {

            /* Cast para obter Geometry selecionada */
            Geometria g = (Geometria) selectedNode.getUserObject();
            float reference[] = g.getAtributos().getReferencial();

            /* ---------- Caso Geometry seja do tipo Tijolo  ---------------- */
            if (g.getAtributos() instanceof Tijolo) {

                float[] firstP = new float[3];
                float[] secondP = new float[3];
                firstP[0] = g.getAtributos().getFirsPoint()[0];
                firstP[1] = g.getAtributos().getFirsPoint()[1];
                firstP[2] = g.getAtributos().getFirsPoint()[2];
                secondP[0] = g.getAtributos().getSecondPoint()[0];
                secondP[1] = g.getAtributos().getSecondPoint()[1];
                secondP[2] = g.getAtributos().getSecondPoint()[2];
                /* Alterando o nome */
                if (jTablePropriedadesGeometria.getValueAt(1, 1) != g.getNome()) {
                    g.setNome(jTablePropriedadesGeometria.getValueAt(1, 1).toString());
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o Xi */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString()) != g.getAtributos().getFirsPoint()[0]) {

                    firstP[0] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString());

                    g.getAtributos().setFirsPoint(firstP);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Yi */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString()) != g.getAtributos().getFirsPoint()[1]) {

                    firstP[1] = Float.valueOf(jTablePropriedadesGeometria.getValueAt(5, 1).toString());

                    g.getAtributos().setFirsPoint(firstP);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o eixo Zi */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString()) != g.getAtributos().getFirsPoint()[2]) {

                    firstP[2] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString());

                    g.getAtributos().setFirsPoint(firstP);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o eixo Xf */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString()) != g.getAtributos().getSecondPoint()[0]) {

                    secondP[0] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString());

                    g.getAtributos().setSecondPoint(secondP);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Yf */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString()) != g.getAtributos().getSecondPoint()[1]) {

                    secondP[1] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString());

                    g.getAtributos().setSecondPoint(secondP);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Zf */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString()) != g.getAtributos().getSecondPoint()[2]) {

                    secondP[1] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString());

                    g.getAtributos().setSecondPoint(secondP);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotX */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString()) != g.getRotX()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotX(g.getRotX() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarX(g.getRotX());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotY */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString()) != g.getRotY()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotY(g.getRotY() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarY(g.getRotY());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotZ */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(12, 1).toString()) != g.getRotZ()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(12, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotZ(g.getRotZ() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarZ(g.getRotZ());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Visiblidade */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(13, 1).toString()) != g.getVisibilidade()) {

                    float visibilidade = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(13, 1).toString()) / 100;

                    g.setVisibilidade(visibilidade);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
            }


            /* ---------- Caso Geometry seja do tipo Esfera ---------------- */
            if (g.getAtributos() instanceof Esfera) {

                /* Alterando o nome */
                if (jTablePropriedadesGeometria.getValueAt(1, 1) != g.getNome()) {
                    g.setNome(jTablePropriedadesGeometria.getValueAt(1, 1).toString());
                    updateCanvas();

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();

                }

                /* Alterando o o Raio */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString()) != g.getAtributos().getRaio()) {

                    String valor = jTablePropriedadesGeometria.getValueAt(4, 1).toString();
                    g.getAtributos().setRaio(Float.parseFloat(valor));
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo X */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString()) != reference[0]) {

                    reference[0] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Y */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString()) != reference[1]) {

                    reference[1] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Z */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString()) != reference[2]) {

                    reference[2] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Visiblidade */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString()) != g.getVisibilidade()) {

                    float visibilidade = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString()) / 100;

                    g.setVisibilidade(visibilidade);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotX */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString()) != g.getRotX()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotX(g.getRotX() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarX(g.getRotX());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotY */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString()) != g.getRotY()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotY(g.getRotY() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarY(g.getRotY());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotZ */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString()) != g.getRotZ()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotZ(g.getRotZ() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarZ(g.getRotZ());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }


            }

            /* ---------- Caso Geometry seja do tipo Cilindro  ---------------- */
            if (g.getAtributos() instanceof Cilindro) {

                /* Alterando o nome */
                if (jTablePropriedadesGeometria.getValueAt(1, 1) != g.getNome()) {
                    g.setNome(jTablePropriedadesGeometria.getValueAt(1, 1).toString());
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o Raio */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString()) != g.getAtributos().getRaio()) {

                    String valor = jTablePropriedadesGeometria.getValueAt(4, 1).toString();
                    g.getAtributos().setRaio(Float.parseFloat(valor));
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o Altura */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString()) != g.getAtributos().getAltura()) {

                    String valor = jTablePropriedadesGeometria.getValueAt(5, 1).toString();
                    g.getAtributos().setAltura(Float.parseFloat(valor));
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o eixo X */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString()) != reference[0]) {

                    reference[0] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Y */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString()) != reference[1]) {

                    reference[1] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Z */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString()) != reference[2]) {

                    reference[2] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Visiblidade */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(12, 1).toString()) != g.getVisibilidade()) {

                    float visibilidade = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(12, 1).toString()) / 100;

                    g.setVisibilidade(visibilidade);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotX */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString()) != g.getRotX()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotX(g.getRotX() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarX(g.getRotX());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotY */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString()) != g.getRotY()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotY(g.getRotY() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarY(g.getRotY());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotZ */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString()) != g.getRotZ()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotZ(g.getRotZ() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarZ(g.getRotZ());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

            }

            /* ---------- Caso Geometry seja do tipo Cone  ---------------- */
            if (g.getAtributos() instanceof Cone) {

                /* Alterando o nome */
                if (jTablePropriedadesGeometria.getValueAt(1, 1) != g.getNome()) {
                    g.setNome(jTablePropriedadesGeometria.getValueAt(1, 1).toString());
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o Raio */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString()) != g.getAtributos().getAltura()) {

                    String valor = jTablePropriedadesGeometria.getValueAt(4, 1).toString();
                    g.getAtributos().setAltura(Float.parseFloat(valor));
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Altura */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString()) != g.getAtributos().getRaio()) {

                    String valor = jTablePropriedadesGeometria.getValueAt(5, 1).toString();
                    g.getAtributos().setRaio(Float.parseFloat(valor));
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o eixo X */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString()) != reference[0]) {

                    reference[0] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Y */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString()) != reference[1]) {

                    reference[1] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }
                /* Alterando o eixo Z */

                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString()) != reference[2]) {

                    reference[2] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(8, 1).toString());
                    g.getAtributos().setReferencial(reference);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Visiblidade */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(12, 1).toString()) != g.getVisibilidade()) {

                    float visibilidade = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(12, 1).toString()) / 100;

                    g.setVisibilidade(visibilidade);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotX */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString()) != g.getRotX()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(9, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotX(g.getRotX() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarX(g.getRotX());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotY */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString()) != g.getRotY()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(10, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotY(g.getRotY() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarY(g.getRotY());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o RotZ */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString()) != g.getRotZ()) {

                    System.out.println("diferente");
                    float rot = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(11, 1).toString());

                    /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
                    float[] referencial;
                    referencial = new float[3];
                    referencial[0] = g.getAtributos().getReferencial()[0];
                    referencial[1] = g.getAtributos().getReferencial()[1];
                    referencial[2] = g.getAtributos().getReferencial()[2];

                    /* Translado para o centro */
                    g.transladaParaCentro();

                    /* Aplica as rotações com o objeto ao centro */
                    g.setRotZ(g.getRotZ() + rot);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
                    g.rotacionarZ(g.getRotZ());

                    /* Agora translada o objeto ao ponto anterior */
                    g.getAtributos().setReferencial(referencial);
                    g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

            }

            /* ---------- Caso Geometry seja do tipo STL  ---------------- */
            if (g.getAtributos() instanceof STL) {

                /* Alterando o nome */
                if (jTablePropriedadesGeometria.getValueAt(1, 1) != g.getNome()) {
                    g.setNome(jTablePropriedadesGeometria.getValueAt(1, 1).toString());
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando a Visiblidade */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString()) != g.getVisibilidade()) {

                    float visibilidade = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(7, 1).toString()) / 100;

                    g.setVisibilidade(visibilidade);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }


                //if (reference != null){
                    /* Alterando o eixo X */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString()) != reference[0]) {

                    reference[0] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(4, 1).toString());
                    //  g.getAtributos().setReferencial(reference);
                    g.getAtributos().addX(reference[0]);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o eixo Y */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString()) != reference[1]) {

                    reference[1] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(5, 1).toString());
                    //   g.getAtributos().setReferencial(reference);
                    g.getAtributos().addY(reference[1]);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

                /* Alterando o eixo Z */
                if (Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString()) != reference[2]) {

                    reference[2] = Float.parseFloat(jTablePropriedadesGeometria.getValueAt(6, 1).toString());
                    // g.getAtributos().setReferencial(reference);
                    g.getAtributos().addZ(reference[2]);
                    managementCore.getManagementTree().atualizarGeometria(g);
                    managementCore.getManagementTree().updateTree();
                    updateCanvas();

                }

            //}

            }

        }


    }//GEN-LAST:event_jTablePropriedadesGeometriaKeyReleased

    private void checkPropriedadesVisibleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkPropriedadesVisibleActionPerformed
        // TODO add your handling code here:

        if (checkPropriedadesVisible.isSelected()) {
            if (selectedNode.getLevel() == 2) {
                //listGeometry.setVisible(true);
                listGeometry.setGroupVisible(true);
                updateCanvas();

            } else {
                geo.setVisible(true);
                updateCanvas();

            }

            updateCanvas();

        } else {
            if (selectedNode.getLevel() == 2) {
                //listGeometry.setVisible(false);
                listGeometry.setGroupVisible(false);
                updateCanvas();

            } else {
                geo.setVisible(false);
                updateCanvas();

            }

        }
    }//GEN-LAST:event_checkPropriedadesVisibleActionPerformed

    private void jSplitPaneTreeSceneComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneTreeSceneComponentResized
}//GEN-LAST:event_jSplitPaneTreeSceneComponentResized

    private void btnAddBrickActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddBrickActionPerformed
        // TODO add your handling code here:

        renderSide.setConfirmar(true);
        renderSide.setClickEsfera(0);
        renderSide.setClickCone(0);
        renderSide.setClickBrick(1);
        renderSide.setClickCilindro(0);
        renderSide.setClickLine(0);
        canvasSide.display();

        renderFront.setConfirmar(true);
        renderFront.setClickEsfera(0);
        renderFront.setClickCone(0);
        renderFront.setClickBrick(1);
        renderFront.setClickCilindro(0);
        renderFront.setClickLine(0);
        canvasFront.display();

        renderTop.setConfirmar(true);
        renderTop.setClickEsfera(0);
        renderTop.setClickCone(0);
        renderTop.setClickBrick(1);
        renderTop.setClickCilindro(0);
        renderTop.setClickLine(0);
        canvasTop.display();

        renderPers.setConfirmar(true);
        renderPers.setClickEsfera(0);
        renderPers.setClickCone(0);
        renderPers.setClickBrick(1);
        renderPers.setClickCilindro(0);
        renderPers.setClickLine(0);
        canvasPers.display();

        canvasPers.display();
    }//GEN-LAST:event_btnAddBrickActionPerformed

    private void jToolBarGeometriasAncestorRemoved(javax.swing.event.AncestorEvent evt) {//GEN-FIRST:event_jToolBarGeometriasAncestorRemoved
        // TODO add your handling code here:
}//GEN-LAST:event_jToolBarGeometriasAncestorRemoved

    private void jSplitPaneLeftComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneLeftComponentResized
        // TODO add your handling code here:

        updateCanvas();
    }//GEN-LAST:event_jSplitPaneLeftComponentResized

    private void jSplitPaneRightComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightComponentResized
        // TODO add your handling code here:

        updateCanvas();
    }//GEN-LAST:event_jSplitPaneRightComponentResized

    private void checkPropriedadesSolidActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkPropriedadesSolidActionPerformed
        // TODO add your handling code here:

        if (checkPropriedadesSolid.isSelected()) {
            if (selectedNode.getLevel() == 2) {
                //listGeometry.setSolid(true);
                listGeometry.setGroupSolid(true);

//                renderFront.setSolido(true);
//                renderSide.setSolido(true);
//                renderPers.setSolido(true);
//                renderTop.setSolido(true);

                updateCanvas();

            } else {
                geo.setSolid(true);

            }

            updateCanvas();

        } else {
            if (selectedNode.getLevel() == 2) {

                listGeometry.setSolid(false);
                listGeometry.setGroupSolid(false);

//                renderFront.setSolido(false);
//                renderSide.setSolido(false);
//                renderPers.setSolido(false);
//                renderTop.setSolido(false);
                updateCanvas();

            } else {
                geo.setSolid(false);

//                renderFront.setSolido(false);
//                renderSide.setSolido(false);
//                renderPers.setSolido(false);
//                renderTop.setSolido(false);
                updateCanvas();

            }

        }
    }//GEN-LAST:event_checkPropriedadesSolidActionPerformed

    private void keyOnCanvas(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_keyOnCanvas
    }//GEN-LAST:event_keyOnCanvas

    private void jSplitPaneRightSceneComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightSceneComponentResized
        // TODO add your handling code here:
    }//GEN-LAST:event_jSplitPaneRightSceneComponentResized

    private void jSplitPaneLeftComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneLeftComponentHidden
        // TODO add your handling code here:
        // updateCanvas();
    }//GEN-LAST:event_jSplitPaneLeftComponentHidden

    private void jSplitPaneLeftComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneLeftComponentShown
        // TODO add your handling code here:
        // updateCanvas();
    }//GEN-LAST:event_jSplitPaneLeftComponentShown

    private void jSplitPaneRightComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightComponentHidden
        // TODO add your handling code here:
        // updateCanvas();
    }//GEN-LAST:event_jSplitPaneRightComponentHidden

    private void jSplitPaneRightComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightComponentShown
        // TODO add your handling code here:
        //  updateCanvas();
    }//GEN-LAST:event_jSplitPaneRightComponentShown

    private void jSplitPaneLeftComponentMoved(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneLeftComponentMoved
        // TODO add your handling code here:
        //  updateCanvas();
    }//GEN-LAST:event_jSplitPaneLeftComponentMoved

    private void jSplitPaneRightComponentMoved(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightComponentMoved
        // TODO add your handling code here:
        //  updateCanvas();
    }//GEN-LAST:event_jSplitPaneRightComponentMoved

    private void jSplitPaneRightAncestorMoved(javax.swing.event.AncestorEvent evt) {//GEN-FIRST:event_jSplitPaneRightAncestorMoved
        // TODO add your handling code here:
        // updateCanvas();
    }//GEN-LAST:event_jSplitPaneRightAncestorMoved

    private void jSplitPaneRightCaretPositionChanged(java.awt.event.InputMethodEvent evt) {//GEN-FIRST:event_jSplitPaneRightCaretPositionChanged
        // TODO add your handling code here:
        // updateCanvas();
    }//GEN-LAST:event_jSplitPaneRightCaretPositionChanged

private void btnAddFonteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddFonteActionPerformed
    // TODO add your handling code here:

    FonteEletromagneticaSimulacao fonteCriada = null;

    /* Chama a Janela que atribui as caracteristicas da fonte passando como
     * parâmetro as coordenadas recebidas acima */ fonteCriada = managementCore.getInterfaceServicos().inserirFonteEletromagneticaSimulacao(0, 0, 0);

    if (fonteCriada != null) {
        if (managementCore.verificaLimiteComputacional(fonteCriada)) {
            managementCore.getManagementTree().addFonte(fonteCriada);
            managementCore.getManagementTree().updateTree();
            // managementCore.getManagementTree().getTree().expandPath(path);
            managementCore.getManagementTree().getTree().expandRow(3);
            setButtonGeometryOff();
            updateCanvas();
            btnGerarMalha.setEnabled(status.setFonteSetada(true));
            managementCore.getManagementTree().getTree().expandRow(2);
            this.updateUI();
            jLabelStatus.setText("Fonte Eletromagnética criada com sucesso");
            fonteCriada = null;
        } else {

            jLabelStatus.setForeground(new Color(255, 0, 0));
            jLabelStatus.setText("Fonte Eletromagnética nao criada");
            setButtonGeometryOff();
            updateCanvas();
            fonteCriada = null;
        }
        managementCore.getManagementTree().getTree().expandRow(2);
        updateCanvas();
    } else {
        jLabelStatus.setText("Fonte não inserida");
    }


}//GEN-LAST:event_btnAddFonteActionPerformed

private void btnGerarMalhaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGerarMalhaActionPerformed
    // TODO add your handling code here:
/*Triangularizando Tudo */
    try {
        jLabelStatus.setText("Triangularizando Geometrias...");

        /* Triangularizacao já com o Domínio Computacional */
        managementCore.triangularizarGeometrias();
        btnSimularFDTD.setEnabled(status.setMalhaEfetuada(true));

    } catch (Exception e) {
        jLabelStatus.setText("Erro na Triangularização");
        btnSimularFDTD.setEnabled(status.setMalhaEfetuada(false));
    }
    /* Gerando a Malha  */
    /* Verificar se os Objetos estão com materiais setados */

    try {
        jLabelStatus.setText("Gerando a malha...");
        System.out.println("gerando malha");
        Vertice max = new Vertice();
        Vertice min = new Vertice();
        min.setCoordenada(managementCore.getDominioComputacional().getAtributos().getFirsPoint());
        max.setCoordenada(managementCore.getDominioComputacional().getAtributos().getSecondPoint());
        System.out.println("aqui");
        managementCore.getDominioComputacional().setListaTriangulos(
                managementCore.getDominioComputacional().getAtributos().triangularizarGeometria());
        System.out.println("depois de triangularizar dominio");

        managementCore.getDominioComputacional().calculaMaxMin();
        if (managementCore.getInterfaceServicos().gerarMalhaFDTD(managementCore.getManagementTree().getTodasGeometrias(managementCore.getDominioComputacional()), max, min)) {
            System.out.println("malha feita");
            statusPre.setForeground(new Color(0, 204, 0));
            statusPre.setBackground(new Color(102, 102, 255));
            statusPre.setEnabled(true);
            statusPre.setOpaque(false);
            statusPro.setForeground(new Color(255, 255, 255));
            statusPro.setBackground(new Color(255, 51, 51));
            statusPro.setOpaque(true);
            statusPro.setEnabled(true);
        } else {
            System.out.println("malha com erro");
        }
        jLabelStatus.setText("Malha gerada com sucesso");


    } catch (Exception e) {
        jLabelStatus.setText("Erro na geração da malha");
        btnGerarMalha.setEnabled(status.isMalhaEfetuada());
        btnSimularFDTD.setEnabled(status.setMalhaEfetuada(false));

    }

}//GEN-LAST:event_btnGerarMalhaActionPerformed

private void btnZoomMaisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnZoomMaisActionPerformed
    // TODO add your handling code here:

    if (focus == 0) {
        renderSide.addZPosition();
    } else if (focus == 1) {
        renderTop.addZPosition();
    } else if (focus == 2) {
        renderFront.addZPosition();
    } else if (focus == 3) {
        renderPers.addZPosition();
    }

}//GEN-LAST:event_btnZoomMaisActionPerformed

private void btnZoomMenosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnZoomMenosActionPerformed
    // TODO add your handling code here:

    if (focus == 0) {
        renderSide.subZPosition();
    } else if (focus == 1) {
        renderTop.subZPosition();
    } else if (focus == 2) {
        renderFront.subZPosition();
    } else if (focus == 3) {
        renderPers.subZPosition();
    }
}//GEN-LAST:event_btnZoomMenosActionPerformed

private void btnRotUpXActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRotUpXActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {

        Geometria g = (Geometria) objSelecionado;
        jLabelStatus.setText(g.getNome());

        /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
        float[] referencial;
        referencial = new float[3];
        referencial[0] = g.getAtributos().getReferencial()[0];
        referencial[1] = g.getAtributos().getReferencial()[1];
        referencial[2] = g.getAtributos().getReferencial()[2];

        /* Translado para o centro */
        g.transladaParaCentro();


        /* Aplica as rotações com o objeto ao centro */
        g.setRotX(g.getRotX() + managementCore.getRotacao());
        g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        g.rotacionarX(g.getRotX());

        /* Agora translada o objeto ao ponto anterior */
        g.getAtributos().setReferencial(referencial);
       // g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        
        updateCanvas();


    } else if (focus == 0) {
        renderSide.subRotateX();
    } else if (focus == 1) {
        renderTop.subRotateX();
    } else if (focus == 2) {
        renderFront.subRotateX();
    } else if (focus == 3) {
        renderPers.subRotateX();


}//GEN-LAST:event_btnRotUpXActionPerformed
    }

private void btnRotDonwXActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRotDonwXActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        jLabelStatus.setText(g.getNome());

        /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
        float[] referencial;
        referencial = new float[3];
        referencial[0] = g.getAtributos().getReferencial()[0];
        referencial[1] = g.getAtributos().getReferencial()[1];
        referencial[2] = g.getAtributos().getReferencial()[2];

        /* Translado para o centro */
        g.transladaParaCentro();

        /* Aplica as rotações com o objeto ao centro */
        g.setRotX(g.getRotX() - managementCore.getRotacao());
        g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        g.rotacionarX(g.getRotX());

        /* Agora translada o objeto ao ponto anterior */
        g.getAtributos().setReferencial(referencial);
        //g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        updateCanvas();


    } else if (focus == 0) {
        renderSide.subRotateX();
    } else if (focus == 1) {
        renderTop.subRotateX();
    } else if (focus == 2) {
        renderFront.subRotateX();
    } else if (focus == 3) {
        renderPers.subRotateX();
    }
}//GEN-LAST:event_btnRotDonwXActionPerformed

private void btnRotLeftYActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRotLeftYActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        jLabelStatus.setText(g.getNome());

        /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
        float[] referencial;
        referencial = new float[3];
        referencial[0] = g.getAtributos().getReferencial()[0];
        referencial[1] = g.getAtributos().getReferencial()[1];
        referencial[2] = g.getAtributos().getReferencial()[2];

        /* Translado para o centro */
        g.transladaParaCentro();

        /* Aplica as rotações com o objeto ao centro */
        g.setRotY(g.getRotY() - managementCore.getRotacao());
        g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        g.rotacionar();

        /* Agora translada o objeto ao ponto anterior */
        g.getAtributos().setReferencial(referencial);
      //  g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        updateCanvas();
    } else if (focus == 0) {
        renderSide.subRotateY();
    } else if (focus == 1) {
        renderTop.subRotateY();
    } else if (focus == 2) {
        renderFront.subRotateY();
    } else if (focus == 3) {
        renderPers.subRotateY();
    }
}//GEN-LAST:event_btnRotLeftYActionPerformed

private void btnSimularFDTDActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSimularFDTDActionPerformed
    // TODO add your handling code here:

    System.out.println("fPx: " + managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
    System.out.println("sPx: " + managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);

    if (managementCore.getInterfaceServicos().configurarSimulacaoFDTD()) {
        jLabelStatus.setText("Simulação em andamento...");

        managementCore.getInterfaceServicos().simularFDTD();

        if (!timerIniciado) {
            toolkit = Toolkit.getDefaultToolkit();
            timer = managementCore.getTimer();
            //  verificarStatus = new VerificarStatus(managementCore, status);
            timer.schedule(verificarStatus,
                    0, //initial delay
                    1 * 2000);  //subsequent rate   
            timerIniciado = true;
        }



    } else {
        jLabelStatus.setText("Erro na simulação");
        btnSimularFDTD.setEnabled(status.setSimulacaoEmAndamento(false));
    }

}//GEN-LAST:event_btnSimularFDTDActionPerformed

private void bntRotRightYActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bntRotRightYActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        jLabelStatus.setText(g.getNome());

        /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
        float[] referencial;
        referencial = new float[3];
        referencial[0] = g.getAtributos().getReferencial()[0];
        referencial[1] = g.getAtributos().getReferencial()[1];
        referencial[2] = g.getAtributos().getReferencial()[2];

        /* Translado para o centro */
        g.transladaParaCentro();

        /* Aplica as rotações com o objeto ao centro */
        g.setRotY(g.getRotY() + managementCore.getRotacao());
        g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        g.rotacionar();

        /* Agora translada o objeto ao ponto anterior */
        g.getAtributos().setReferencial(referencial);
       // g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        updateCanvas();
    } else if (focus == 0) {
        renderSide.addRotateY();
    } else if (focus == 1) {
        renderTop.addRotateY();
    } else if (focus == 2) {
        renderFront.addRotateY();
    } else if (focus == 3) {
        renderPers.addRotateY();
    }
}//GEN-LAST:event_bntRotRightYActionPerformed

private void btnRotZMaisActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRotZMaisActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        jLabelStatus.setText(g.getNome());

        /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
        float[] referencial;
        referencial = new float[3];
        referencial[0] = g.getAtributos().getReferencial()[0];
        referencial[1] = g.getAtributos().getReferencial()[1];
        referencial[2] = g.getAtributos().getReferencial()[2];

        /* Translado para o centro */
        g.transladaParaCentro();

        /* Aplica as rotações com o objeto ao centro */
        g.setRotZ(g.getRotZ() + managementCore.getRotacao());
        g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        g.rotacionar();

        /* Agora translada o objeto ao ponto anterior */
        g.getAtributos().setReferencial(referencial);
       // g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        updateCanvas();
    } else if (focus == 0) {
        renderSide.addRotateZ();
    } else if (focus == 1) {
        renderTop.addRotateZ();
    } else if (focus == 2) {
        renderFront.addRotateZ();
    } else if (focus == 3) {
        renderPers.addRotateZ();
    }
}//GEN-LAST:event_btnRotZMaisActionPerformed

private void btnRotZMenosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRotZMenosActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        jLabelStatus.setText(g.getNome());
        /* Armazena o referencial (ponto da Geometria) antes de alterá-lo */
        float[] referencial;
        referencial = new float[3];
        referencial[0] = g.getAtributos().getReferencial()[0];
        referencial[1] = g.getAtributos().getReferencial()[1];
        referencial[2] = g.getAtributos().getReferencial()[2];

        /* Translado para o centro */
        g.transladaParaCentro();

        /* Aplica as rotações com o objeto ao centro */
        g.setRotZ(g.getRotZ() - managementCore.getRotacao());
        g.setListaTriangulos(g.getAtributos().triangularizarGeometria());
        g.rotacionar();

        /* Agora translada o objeto ao ponto anterior */
        g.getAtributos().setReferencial(referencial);
       // g.setListaTriangulos(g.getAtributos().triangularizarGeometria());

        updateCanvas();
    } else if (focus == 0) {
        renderSide.subRotateZ();
    } else if (focus == 1) {
        renderTop.subRotateZ();
    } else if (focus == 2) {
        renderFront.subRotateZ();
    } else if (focus == 3) {
        renderPers.subRotateZ();
    }
}//GEN-LAST:event_btnRotZMenosActionPerformed

private void btnAlterarGridActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAlterarGridActionPerformed
    // TODO add your handling code here:

    Vector listaRender = new Vector();
    listaRender.add(renderFront);
    listaRender.add(renderPers);
    listaRender.add(renderTop);
    listaRender.add(renderSide);
    JanelaConfigurarGrid janelaGrid = new JanelaConfigurarGrid(managementCore, listaRender, new javax.swing.JFrame(), true);
    janelaGrid.setVisible(true);
    rotacao = janelaGrid.rotacao;
    translacao = janelaGrid.translacao;

    updateCanvas();
}//GEN-LAST:event_btnAlterarGridActionPerformed

private void btnAlterarDominioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAlterarDominioActionPerformed
    // TODO add your handling code here:

    JanelaDominioComputacional janelaDominio = new JanelaDominioComputacional(managementCore, new javax.swing.JFrame(), true);
    janelaDominio.setVisible(true);
    /* Atualizando Grid */
    float limiteX = Math.abs(
            managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0] -
            managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);

    float limiteY = Math.abs(
            managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1] -
            managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
    float fatorDivisaoGridX = limiteX / managementCore.getDominioComputacional().getAtributos().getDiscretizacaoX();
    float fatorDivisaoGridY = limiteY / managementCore.getDominioComputacional().getAtributos().getDiscretizacaoY();
    System.out.println("fatorDivisaoX: " + fatorDivisaoGridX);

    renderSide.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
    renderSide.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
    renderSide.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
    renderSide.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
    renderSide.setFatorDivisaoGridX(fatorDivisaoGridX);
    renderSide.setFatorDivisaoGridY(fatorDivisaoGridY);

    renderTop.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
    renderTop.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
    renderTop.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
    renderTop.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
    renderTop.setFatorDivisaoGridX(fatorDivisaoGridX);
    renderTop.setFatorDivisaoGridY(fatorDivisaoGridY);

    renderFront.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
    renderFront.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
    renderFront.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
    renderFront.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
    renderFront.setFatorDivisaoGridX(fatorDivisaoGridX);
    renderFront.setFatorDivisaoGridY(fatorDivisaoGridY);

    renderPers.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
    renderPers.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
    renderPers.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
    renderPers.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
    renderPers.setFatorDivisaoGridX(fatorDivisaoGridX);
    renderPers.setFatorDivisaoGridY(fatorDivisaoGridY);

    updateCanvas();
}//GEN-LAST:event_btnAlterarDominioActionPerformed

private void jSplitPaneRightSceneComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightSceneComponentHidden
    // TODO add your handling code here:

    updateCanvas();

}//GEN-LAST:event_jSplitPaneRightSceneComponentHidden

private void jSplitPaneRightSceneComponentMoved(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightSceneComponentMoved
    // TODO add your handling code here:

    updateCanvas();
}//GEN-LAST:event_jSplitPaneRightSceneComponentMoved

private void jSplitPaneRightSceneComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jSplitPaneRightSceneComponentShown
    // TODO add your handling code here:

    updateCanvas();
}//GEN-LAST:event_jSplitPaneRightSceneComponentShown

private void jSplitPaneRightSceneAncestorResized(java.awt.event.HierarchyEvent evt) {//GEN-FIRST:event_jSplitPaneRightSceneAncestorResized
    // TODO add your handling code here:

    updateCanvas();
}//GEN-LAST:event_jSplitPaneRightSceneAncestorResized

private void btnMoverDireitaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoverDireitaActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {

        Geometria g = (Geometria) objSelecionado;
        Geometria gDepois = new Geometria();
        gDepois = managementCore.copiarGeometria(g);
        gDepois.getAtributos().addX(managementCore.getTranslacao());
        if (managementCore.verificaLimiteComputacional(gDepois)) {
            g.getAtributos().addX(managementCore.getTranslacao());
        } else {
            managementCore.getInterfaceServicos().exibirMensagemErro("Geometria fora do Domínio Computacional");
            setControleMousePressed(false, null);
        }
        updateCanvas();
    } else if (focus == 0) {
        renderSide.addXPosition();
    } else if (focus == 1) {
        renderTop.addXPosition();
    } else if (focus == 2) {
        renderFront.addXPosition();
    } else if (focus == 3) {
        renderPers.addXPosition();
    }

}//GEN-LAST:event_btnMoverDireitaActionPerformed

private void btnMoverEsquerdaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoverEsquerdaActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        Geometria gDepois = new Geometria();
        gDepois = managementCore.copiarGeometria(g);
        gDepois.getAtributos().subX(managementCore.getTranslacao());
        if (managementCore.verificaLimiteComputacional(gDepois)) {
            g.getAtributos().subX(managementCore.getTranslacao());
        } else {
            managementCore.getInterfaceServicos().exibirMensagemErro("Geometria fora do Domínio Computacional");
            setControleMousePressed(false, null);
        }


        updateCanvas();
    } else {
        if (focus == 0) {
            renderSide.subXPosition();
        } else if (focus == 1) {
            renderTop.subXPosition();
        } else if (focus == 2) {
            renderFront.subXPosition();
        } else if (focus == 3) {
            renderPers.subXPosition();
        }
    }
}//GEN-LAST:event_btnMoverEsquerdaActionPerformed

private void btnMoverBaixoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoverBaixoActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        Geometria gDepois = new Geometria();
        gDepois = managementCore.copiarGeometria(g);
        gDepois.getAtributos().subY(managementCore.getTranslacao());
        if (managementCore.verificaLimiteComputacional(gDepois)) {
            g.getAtributos().subY(managementCore.getTranslacao());
        } else {
            managementCore.getInterfaceServicos().exibirMensagemErro("Geometria fora do Domínio Computacional");
            setControleMousePressed(false, null);
        }
        updateCanvas();
    } else if (focus == 0) {
        renderSide.subYPosition();
    } else if (focus == 1) {
        renderTop.subYPosition();
    } else if (focus == 2) {
        renderFront.subYPosition();
    } else if (focus == 3) {
        renderPers.subYPosition();
    }

}//GEN-LAST:event_btnMoverBaixoActionPerformed

private void btnMoverCimaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnMoverCimaActionPerformed
    // TODO add your handling code here:

    if (objSelecionado instanceof Geometria && objSelecionado != null) {
        Geometria g = (Geometria) objSelecionado;
        Geometria gDepois = new Geometria();
        gDepois = managementCore.copiarGeometria(g);
        gDepois.getAtributos().addY(managementCore.getTranslacao());
        if (managementCore.verificaLimiteComputacional(gDepois)) {
            g.getAtributos().addY(managementCore.getTranslacao());
        } else {
            managementCore.getInterfaceServicos().exibirMensagemErro("Geometria fora do Domínio Computacional");
            setControleMousePressed(false, null);
        }

        jLabelStatus.setText(g.getNome());
        updateCanvas();

    } else if (focus == 0) {
        renderSide.addYPosition();
    } else if (focus == 1) {
        renderTop.addYPosition();
    } else if (focus == 2) {
        renderFront.addYPosition();
    } else if (focus == 3) {
        renderPers.addYPosition();
    }


}//GEN-LAST:event_btnMoverCimaActionPerformed

private void btnCopiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCopiarActionPerformed
    // TODO add your handling code here:

    if ((objSelecionado instanceof Geometria) && (objSelecionado != null)) {

        copia = new Geometria();
        copia = managementCore.copiarGeometria((Geometria) objSelecionado);
        btnColar.setEnabled(true);
    //jLabelStatus.setText("Geometria " + copia.getNome() + "copiada.");

    } else {

        jLabelStatus.setForeground(new Color(255, 0, 0));
        jLabelStatus.setText("Selecione uma Geometria");
    }

}//GEN-LAST:event_btnCopiarActionPerformed

private void btnColarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnColarActionPerformed
    // TODO add your handling code here:

    if (copia != null) {

        if (managementCore.colarGeometria(copia)) {
            managementCore.getManagementTree().updateTree();
            managementCore.getManagementTree().getTree().expandPath(path);
            updateCanvas();
            btnColar.setEnabled(false);
        }
    }

}//GEN-LAST:event_btnColarActionPerformed

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
    // TODO add your handling code here:

    managementCore.getInterfaceServicos().salvarProjeto();
    managementCore.getInterfaceServicos().exibirMensagemInformacao("Projeto Salvo com Sucesso");

}//GEN-LAST:event_btnSalvarActionPerformed

private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed
    // TODO add your handling code here:

    managementCore.getInterfaceServicos().novoProjeto();
}//GEN-LAST:event_btnNovoActionPerformed

private void btnAbrirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAbrirActionPerformed
    // TODO add your handling code here:

    managementCore.getInterfaceServicos().abrirProjeto();

}//GEN-LAST:event_btnAbrirActionPerformed

private void menuItemEditarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarMouseEntered
    // TODO add your handling code here:

    menuItemEditar.setBackground(new Color(192, 192, 192));

}//GEN-LAST:event_menuItemEditarMouseEntered

private void menuItemEditarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarMouseExited
    // TODO add your handling code here:

    menuItemEditar.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemEditarMouseExited

private void menuItemDeletarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarMouseEntered
    // TODO add your handling code here:

    menuItemDeletar.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemDeletarMouseEntered

private void menuItemDeletarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarMouseExited
    // TODO add your handling code here:

    menuItemDeletar.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemDeletarMouseExited

private void menuItemCopiarMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemCopiarMouseEntered
    // TODO add your handling code here:

    menuItemCopiar.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemCopiarMouseEntered

private void menuItemCopiarMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemCopiarMouseExited
    // TODO add your handling code here:

    menuItemCopiar.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemCopiarMouseExited

private void menuItemCopiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemCopiarActionPerformed
    // TODO add your handling code here:

    btnCopiar.doClick();
    menuItemColarLista.setEnabled(true);
    jPopupMenuGeometrias.setVisible(false);
}//GEN-LAST:event_menuItemCopiarActionPerformed

private void menuItemDeletarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemDeletarActionPerformed
    // TODO add your handling code here:

    btnRemObj.doClick();
    jPopupMenuGeometrias.setVisible(false);
}//GEN-LAST:event_menuItemDeletarActionPerformed

private void menuItemEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemEditarActionPerformed
    // TODO add your handling code here:

    JanelaPropriedades janelaPro = new JanelaPropriedades(objSelecionado, managementCore, new javax.swing.JFrame(), true);
    janelaPro.setVisible(true);

    Object objAlterado = janelaPro.getObjAlterado();
    verificarStatusGeometria();

    managementCore.getManagementTree().updateTree();
    Geometria g = (Geometria) objAlterado;

    if (g.getMaterial().getNome() != null) {
        status.setMaterialSetado(true);
    } else {
        status.setMaterialSetado(false);
    }

    if (g.getAtributos() instanceof Esfera) {
        setFieldsTableProSphere(g);
        jTablePropriedadesGeometria.updateUI();
    }
    if (g.getAtributos() instanceof Tijolo) {
        setFieldsTableProBrick(g);
        jTablePropriedadesGeometria.updateUI();
    }
    if (g.getAtributos() instanceof Cilindro) {
        setFieldsTableProCylinder(g);
        jTablePropriedadesGeometria.updateUI();
    }
    if (g.getAtributos() instanceof Cone) {
        setFieldsTableProCone(g);
        jTablePropriedadesGeometria.updateUI();
    }
    if (g.getAtributos() instanceof STL) {
        /* ajeitar a STL para a interface */
        setFieldsTableProSTL(g);
        jTablePropriedadesGeometria.updateUI();
    }
    jPopupMenuGeometrias.setVisible(false);
    menuItemEditarLista.setBackground(new Color(255, 255, 255));

}//GEN-LAST:event_menuItemEditarActionPerformed

private void jPopupMenuGeometriasFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jPopupMenuGeometriasFocusLost
    // TODO add your handling code here:
}//GEN-LAST:event_jPopupMenuGeometriasFocusLost

private void jPopupMenuGeometriasMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPopupMenuGeometriasMouseExited
    // TODO add your handling code here:
    jPopupMenuGeometrias.setVisible(false);

}//GEN-LAST:event_jPopupMenuGeometriasMouseExited

private void menuItemEditarListaMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarListaMouseEntered
    // TODO add your handling code here:

    menuItemEditarLista.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemEditarListaMouseEntered

private void menuItemEditarListaMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarListaMouseExited
    // TODO add your handling code here

    menuItemEditarLista.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemEditarListaMouseExited

private void menuItemEditarListaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemEditarListaActionPerformed
    // TODO add your handling code here:

    JanelaPropriedades jFrameProGeometria = new JanelaPropriedades(objSelecionado, managementCore, new javax.swing.JFrame(), true);
    jFrameProGeometria.setVisible(true);
    managementCore.getManagementTree().getTree().expandRow(3);
    setButtonGeometryOff();
    setEnableBtnGeometry(false);
    setFieldsTableProList(listGeometry);
    updateCanvas();
    jPopupMenuListaGeometrias.setVisible(false);
    menuItemEditarLista.setBackground(new Color(255, 255, 255));


}//GEN-LAST:event_menuItemEditarListaActionPerformed

private void menuItemDeletarListaMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarListaMouseEntered
    // TODO add your handling code here:

    menuItemDeletarLista.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemDeletarListaMouseEntered

private void menuItemDeletarListaMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarListaMouseExited
    // TODO add your handling code here:

    menuItemDeletarLista.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemDeletarListaMouseExited

private void menuItemDeletarListaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemDeletarListaActionPerformed
    // TODO add your handling code here:

    btnRemObj.doClick();
    jPopupMenuListaGeometrias.setVisible(false);
    menuItemDeletarLista.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemDeletarListaActionPerformed

private void menuItemColarListaMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemColarListaMouseEntered
    // TODO add your handling code here:

    menuItemColarLista.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemColarListaMouseEntered

private void menuItemColarListaMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemColarListaMouseExited
    // TODO add your handling code here:

    menuItemColarLista.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemColarListaMouseExited

private void menuItemColarListaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemColarListaActionPerformed
    // TODO add your handling code here:

    btnColar.doClick();
    menuItemColarLista.setEnabled(false);
    jPopupMenuListaGeometrias.setVisible(false);
    menuItemColarLista.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemColarListaActionPerformed

private void jPopupMenuListaGeometriasMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPopupMenuListaGeometriasMouseExited
    // TODO add your handling code here:
    jPopupMenuGeometrias.setVisible(false);
    jPopupMenuListaGeometrias.setVisible(false);
}//GEN-LAST:event_jPopupMenuListaGeometriasMouseExited

private void jPopupMenuListaGeometriasFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jPopupMenuListaGeometriasFocusLost
    // TODO add your handling code here:
    jPopupMenuListaGeometrias.setVisible(false);
    System.out.println("focus lost lista geometrias");
}//GEN-LAST:event_jPopupMenuListaGeometriasFocusLost

private void btnAddMalhaProntaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddMalhaProntaActionPerformed
    // TODO add your handling code here:

    managementCore.getInterfaceServicos().importarMalha();

}//GEN-LAST:event_btnAddMalhaProntaActionPerformed

private void menuItemEditarRelatorioMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarRelatorioMouseEntered
    // TODO add your handling code here:

    menuItemEditarRelatorio.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemEditarRelatorioMouseEntered

private void menuItemEditarRelatorioMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarRelatorioMouseExited
    // TODO add your handling code here:

    menuItemEditarRelatorio.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemEditarRelatorioMouseExited

private void menuItemEditarRelatorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemEditarRelatorioActionPerformed
    // TODO add your handling code here:
    Visualizador v = (Visualizador) objSelecionado;
    v.setVisible(true);
}//GEN-LAST:event_menuItemEditarRelatorioActionPerformed

private void menuItemDeletarRelatorioMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarRelatorioMouseEntered
    // TODO add your handling code here:
    menuItemDeletarRelatorio.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemDeletarRelatorioMouseEntered

private void menuItemDeletarRelatorioMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarRelatorioMouseExited
    // TODO add your handling code here:
    menuItemDeletarRelatorio.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemDeletarRelatorioMouseExited

private void menuItemDeletarRelatorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemDeletarRelatorioActionPerformed
    // TODO add your handling code here
    managementCore.getManagementTree().remObjSelecionado();
    jPopupMenuRelatorios.setVisible(false);
}//GEN-LAST:event_menuItemDeletarRelatorioActionPerformed

private void jPopupMenuRelatoriosMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPopupMenuRelatoriosMouseExited
    // TODO add your handling code here:
}//GEN-LAST:event_jPopupMenuRelatoriosMouseExited

private void jPopupMenuRelatoriosFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jPopupMenuRelatoriosFocusLost
    // TODO add your handling code here:
}//GEN-LAST:event_jPopupMenuRelatoriosFocusLost

private void btnFEMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnFEMActionPerformed
    // TODO add your handling code here:

    JanelaFEM janela = new JanelaFEM(managementCore, new javax.swing.JFrame(), true);
    janela.setVisible(true);
}//GEN-LAST:event_btnFEMActionPerformed

private void jPanelTreeMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanelTreeMouseEntered
// TODO add your handling code here:
    jPopupMenuGeometrias.setVisible(false);
}//GEN-LAST:event_jPanelTreeMouseEntered

private void jPopupMenuListaGeometriasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPopupMenuListaGeometriasMouseClicked
// TODO add your handling code here:
    jPopupMenuGeometrias.setVisible(false);
    jPopupMenuListaGeometrias.setVisible(false);
}//GEN-LAST:event_jPopupMenuListaGeometriasMouseClicked

private void btnAddRelatoriosPosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddRelatoriosPosActionPerformed
// TODO add your handling code here:
    // managementCore.getInterfaceServicos().exibirGraficoTempo("D:\\UNICAMP\\Projeto Mestrado\\arquivos de testes - ssar\\tempo 2d.txt");

    JanelaInserirRelatorios j = new JanelaInserirRelatorios(new javax.swing.JFrame(), true, managementCore.getInterfaceServicos().getCaminhoResultadosProjeto());
    System.out.println(j.toString());
    j.setVisible(true);
    if (!j.toString().contains("--- Selecionar ----")) {
        managementCore.getManagementTree().addPreRelatorio(j);
        
    }
}//GEN-LAST:event_btnAddRelatoriosPosActionPerformed

private void menuItemEditarPreRelatorioMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarPreRelatorioMouseEntered
// TODO add your handling code here:
    menuItemEditarPreRelatorio.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemEditarPreRelatorioMouseEntered

private void menuItemEditarPreRelatorioMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemEditarPreRelatorioMouseExited
// TODO add your handling code here:
    menuItemEditarPreRelatorio.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemEditarPreRelatorioMouseExited

private void menuItemEditarPreRelatorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemEditarPreRelatorioActionPerformed
// TODO add your handling code here:
    JanelaInserirRelatorios j = (JanelaInserirRelatorios) objSelecionado;
    j.setVisible(true);
}//GEN-LAST:event_menuItemEditarPreRelatorioActionPerformed

private void menuItemDeletarPreRelatorioMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarPreRelatorioMouseEntered
// TODO add your handling code here:
    menuItemDeletarPreRelatorio.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemDeletarPreRelatorioMouseEntered

private void menuItemDeletarPreRelatorioMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemDeletarPreRelatorioMouseExited
// TODO add your handling code here:
    menuItemDeletarPreRelatorio.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemDeletarPreRelatorioMouseExited

private void menuItemDeletarPreRelatorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuItemDeletarPreRelatorioActionPerformed
// TODO add your handling code here:
    managementCore.getManagementTree().remObjSelecionado();
    jPopupMenuPreRelatorios.setVisible(false);
}//GEN-LAST:event_menuItemDeletarPreRelatorioActionPerformed

private void jPopupMenuPreRelatoriosMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPopupMenuPreRelatoriosMouseExited
// TODO add your handling code here:
    jPopupMenuPreRelatorios.setVisible(false);
}//GEN-LAST:event_jPopupMenuPreRelatoriosMouseExited

private void jPopupMenuPreRelatoriosFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jPopupMenuPreRelatoriosFocusLost
// TODO add your handling code here:
    jPopupMenuPreRelatorios.setVisible(false);
    System.out.println("focus lost lista Pre Relatorios");
}//GEN-LAST:event_jPopupMenuPreRelatoriosFocusLost

private void menuItemExecutarRelatoriosMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemExecutarRelatoriosMouseEntered
// TODO add your handling code here:
    menuItemExecutarRelatorios.setBackground(new Color(192, 192, 192));
}//GEN-LAST:event_menuItemExecutarRelatoriosMouseEntered

private void menuItemExecutarRelatoriosMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_menuItemExecutarRelatoriosMouseExited
// TODO add your handling code here:
    menuItemExecutarRelatorios.setBackground(new Color(255, 255, 255));
}//GEN-LAST:event_menuItemExecutarRelatoriosMouseExited

private void menuItemExecutarRelatoriosActionPerformed(java.awt.event.ActionEvent evt) {                                                           
// TODO add your handling code here:
    JanelaInserirRelatorios j;
    RelatorioPosProcessamento r;
    if (objSelecionado instanceof JanelaInserirRelatorios) {

        j = (JanelaInserirRelatorios) objSelecionado;
        r = j.getRelatorioPosProcessamento();
        System.out.println(r.getTipo());
        if (r.getTipo().contains("tempo")) {

            System.out.println(r.getNomeArquivoRelatorio());

            managementCore.getInterfaceServicos().exibirGraficoTempo(
                    r.getNomeArquivoRelatorio(), "Passos de Tempo", "Amplitude");

        } else if (r.getTipo().contains("filme3D")) {
            System.out.println("filme");
            System.out.println("nome arquivo relatorio: " + r.getNomeArquivoRelatorio());
            managementCore.getInterfaceServicos().exibirFilme3D(r.getNomeArquivoRelatorio());

        } else if (r.getTipo().contains("AreaSAR")) {
            System.out.println("nome arquivo relatorio: " + r.getNomeArquivoRelatorio());
            managementCore.getInterfaceServicos().exibirGraficoAreaSAR(r.getNomeArquivoRelatorio(), "Eixo X", "Eixo Y");
        
         } else if (r.getTipo().contains("filme2D")) {
            System.out.println("nome arquivo relatorio: " + r.getNomeArquivoRelatorio());
            managementCore.getInterfaceServicos().exibirFilme2D(r.getNomeArquivoRelatorio());
        }

    }
}

private void btnRotUpXMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnRotUpXMousePressed
    setControleMousePressed(true, (JButton) evt.getComponent());
}//GEN-LAST:event_btnRotUpXMousePressed

private void btnRotUpXMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_btnRotUpXMouseReleased
    setControleMousePressed(false, null);
}//GEN-LAST:event_btnRotUpXMouseReleased

    private void clearFieldsJTablePropriedades() {

        jTablePropriedadesGeometria.setValueAt("", 0, 0);
        jTablePropriedadesGeometria.setValueAt("", 0, 1);
        jTablePropriedadesGeometria.setValueAt("", 1, 0);
        jTablePropriedadesGeometria.setValueAt("", 1, 1);
        jTablePropriedadesGeometria.setValueAt("", 2, 0);
        jTablePropriedadesGeometria.setValueAt("", 2, 1);
        jTablePropriedadesGeometria.setValueAt("", 3, 0);
        jTablePropriedadesGeometria.setValueAt("", 3, 1);
        jTablePropriedadesGeometria.setValueAt("", 4, 1);
        jTablePropriedadesGeometria.setValueAt("", 4, 0);
        jTablePropriedadesGeometria.setValueAt("", 5, 1);
        jTablePropriedadesGeometria.setValueAt("", 5, 0);
        jTablePropriedadesGeometria.setValueAt("", 6, 0);
        jTablePropriedadesGeometria.setValueAt("", 6, 1);
        jTablePropriedadesGeometria.setValueAt("", 7, 0);
        jTablePropriedadesGeometria.setValueAt("", 7, 1);
        jTablePropriedadesGeometria.setValueAt("", 8, 0);
        jTablePropriedadesGeometria.setValueAt("", 8, 1);
        jTablePropriedadesGeometria.setValueAt("", 9, 0);
        jTablePropriedadesGeometria.setValueAt("", 9, 1);
        jTablePropriedadesGeometria.setValueAt("", 10, 0);
        jTablePropriedadesGeometria.setValueAt("", 10, 1);
        jTablePropriedadesGeometria.setValueAt("", 11, 0);
        jTablePropriedadesGeometria.setValueAt("", 11, 1);
        jTablePropriedadesGeometria.setValueAt("", 12, 0);
        jTablePropriedadesGeometria.setValueAt("", 12, 1);
        jTablePropriedadesGeometria.setValueAt("", 13, 0);
        jTablePropriedadesGeometria.setValueAt("", 13, 1);
        if (checkPropriedadesVisible.isSelected()) {
            checkPropriedadesVisible.setSelected(false);
            checkPropriedadesVisible.setEnabled(false);
        } else {
            checkPropriedadesVisible.setEnabled(false);
        }

        if (checkPropriedadesSolid.isSelected()) {
            checkPropriedadesSolid.setSelected(false);
            checkPropriedadesSolid.setEnabled(false);
        } else {
            checkPropriedadesSolid.setEnabled(false);
        }

        jLabelStatus.setText("");

    }

    private void setEnableBtnGeometry(boolean b) {
        btnAddBrick.setEnabled(b);
        btnAddCone.setEnabled(b);
        btnAddCylinder.setEnabled(b);
        btnAddSphere.setEnabled(b);
        btnRemObj.setEnabled(b);
        btnImpStl.setEnabled(b);
    }

    private void setFieldsTableProFonte(FonteEletromagneticaSimulacao f) {
        /* Mostra propriedades básicas da Geometria na tabela lateral */
        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(f.getIdFonte(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Fonte:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(f.toString(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" X:", 2, 0);
        jTablePropriedadesGeometria.setValueAt(f.getX(), 2, 1);
        jTablePropriedadesGeometria.setValueAt(" Y:", 3, 0);
        jTablePropriedadesGeometria.setValueAt(f.getY(), 3, 1);
        jTablePropriedadesGeometria.setValueAt(" Z:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(f.getZ(), 4, 1);

    }

    /**
     * 
     * @param geo
     */
    private void setFieldsTableProBrick(Geometria geo) {
        /* Mostra propriedades básicas da Geometria na tabela lateral */
        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getIdentificador(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Nome:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getNome(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" Material:", 2, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getMaterial().getNome(), 2, 1);
        jTablePropriedadesGeometria.setValueAt(" Cor:", 3, 0);
        Color cor = geo.getColor();
        String auxCor = "(" + cor.getRed() + "," + cor.getGreen() + "," + cor.getBlue() + ")";
        jTablePropriedadesGeometria.setValueAt(auxCor, 3, 1);
        float[] firstPoint = new float[3];
        float[] secondPoint = new float[3];
        firstPoint = geo.getAtributos().getFirsPoint();
        secondPoint = geo.getAtributos().getSecondPoint();

        jTablePropriedadesGeometria.setValueAt(" Xi:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(firstPoint[0], 4, 1);
        jTablePropriedadesGeometria.setValueAt(" Yi:", 5, 0);
        jTablePropriedadesGeometria.setValueAt(firstPoint[1], 5, 1);
        jTablePropriedadesGeometria.setValueAt(" Zi:", 6, 0);
        jTablePropriedadesGeometria.setValueAt(firstPoint[2], 6, 1);

        jTablePropriedadesGeometria.setValueAt(" Xf:", 7, 0);
        jTablePropriedadesGeometria.setValueAt(secondPoint[0], 7, 1);
        jTablePropriedadesGeometria.setValueAt(" Yf:", 8, 0);
        jTablePropriedadesGeometria.setValueAt(secondPoint[1], 8, 1);
        jTablePropriedadesGeometria.setValueAt(" Zf:", 9, 0);
        jTablePropriedadesGeometria.setValueAt(secondPoint[2], 9, 1);
        jTablePropriedadesGeometria.setValueAt(" RotX:", 10, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotX(), 10, 1);
        jTablePropriedadesGeometria.setValueAt(" RotY:", 11, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotY(), 11, 1);
        jTablePropriedadesGeometria.setValueAt(" RotZ:", 12, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotZ(), 12, 1);
        jTablePropriedadesGeometria.setValueAt(" Visibilidade: ", 13, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getVisibilidade() * 100, 13, 1);

        if (geo.isVisible()) {
            checkPropriedadesVisible.setSelected(true);
        } else {
            checkPropriedadesVisible.setSelected(false);
        }

        if (geo.isSolid()) {
            checkPropriedadesSolid.setSelected(true);
        } else {
            checkPropriedadesSolid.setSelected(false);
        }

    }

    /**
     * 
     * @param geo
     */
    private void setFieldsTableProCylinder(Geometria geo) {
        /* Mostra propriedades básicas da Geometria na tabela lateral */
        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getIdentificador(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Nome:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getNome(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" Material:", 2, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getMaterial().getNome(), 2, 1);
        jTablePropriedadesGeometria.setValueAt(" Cor:", 3, 0);
        Color cor = geo.getColor();
        String auxCor = "(" + cor.getRed() + "," + cor.getGreen() + "," + cor.getBlue() + ")";
        jTablePropriedadesGeometria.setValueAt(auxCor, 3, 1);
        jTablePropriedadesGeometria.setValueAt(" Raio:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getAtributos().getRaio(), 4, 1);
        jTablePropriedadesGeometria.setValueAt(" Altura:", 5, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getAtributos().getAltura(), 5, 1);
        float reference[] = geo.getAtributos().getReferencial();
        jTablePropriedadesGeometria.setValueAt(" X:", 6, 0);
        jTablePropriedadesGeometria.setValueAt(reference[0], 6, 1);
        jTablePropriedadesGeometria.setValueAt(" Y:", 7, 0);
        jTablePropriedadesGeometria.setValueAt(reference[1], 7, 1);
        jTablePropriedadesGeometria.setValueAt(" Z:", 8, 0);
        jTablePropriedadesGeometria.setValueAt(reference[2], 8, 1);

        jTablePropriedadesGeometria.setValueAt(" RotX:", 9, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotX(), 9, 1);
        jTablePropriedadesGeometria.setValueAt(" RotY:", 10, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotY(), 10, 1);
        jTablePropriedadesGeometria.setValueAt(" RotZ:", 11, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotZ(), 11, 1);
        jTablePropriedadesGeometria.setValueAt(" Visibilidade:", 12, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getVisibilidade() * 100, 12, 1);
        if (geo.isVisible()) {
            checkPropriedadesVisible.setSelected(true);
        } else {
            checkPropriedadesVisible.setSelected(false);
        }

        if (geo.isSolid()) {
            checkPropriedadesSolid.setSelected(true);
        } else {
            checkPropriedadesSolid.setSelected(false);
        }

    }

    /**
     * Seta Propriedades na tabela lateral do objeto Geometrya (Esfera)
     * @param geo
     */
    private void setFieldsTableProSphere(Geometria geo) {
        /* Mostra propriedades básicas da Geometria na tabela lateral */
        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getIdentificador(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Nome:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getNome(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" Material:", 2, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getMaterial().getNome(), 2, 1);
        jTablePropriedadesGeometria.setValueAt(" Cor:", 3, 0);
        Color cor = geo.getColor();
        String auxCor = "(" + cor.getRed() + "," + cor.getGreen() + "," + cor.getBlue() + ")";
        jTablePropriedadesGeometria.setValueAt(auxCor, 3, 1);
        jTablePropriedadesGeometria.setValueAt(" Raio:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getAtributos().getRaio(), 4, 1);
        float reference[] = geo.getAtributos().getReferencial();
        jTablePropriedadesGeometria.setValueAt(" X:", 5, 0);
        jTablePropriedadesGeometria.setValueAt(reference[0], 5, 1);
        jTablePropriedadesGeometria.setValueAt(" Y:", 6, 0);
        jTablePropriedadesGeometria.setValueAt(reference[1], 6, 1);
        jTablePropriedadesGeometria.setValueAt(" Z:", 7, 0);
        jTablePropriedadesGeometria.setValueAt(reference[2], 7, 1);

        jTablePropriedadesGeometria.setValueAt(" RotX:", 8, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotX(), 8, 1);
        jTablePropriedadesGeometria.setValueAt(" RotY:", 9, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotY(), 9, 1);
        jTablePropriedadesGeometria.setValueAt(" RotZ:", 10, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotZ(), 10, 1);
        jTablePropriedadesGeometria.setValueAt(" Visibilidade: ", 11, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getVisibilidade() * 100, 11, 1);
        if (geo.isVisible()) {
            checkPropriedadesVisible.setSelected(true);
        } else {
            checkPropriedadesVisible.setSelected(false);
        }

        if (geo.isSolid()) {
            checkPropriedadesSolid.setSelected(true);
        } else {
            checkPropriedadesSolid.setSelected(false);
        }

        jTablePropriedadesGeometria.updateUI();

    }

    /**
     * Seta Propriedades na tabela lateral do objeto Geometrya (STL)
     * @param geo
     */
    private void setFieldsTableProSTL(Geometria geo) {
        /* Mostra propriedades básicas da Geometria na tabela lateral */
        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getIdentificador(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Nome:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getNome(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" Material:", 2, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getMaterial().getNome(), 2, 1);
        jTablePropriedadesGeometria.setValueAt(" Cor:", 3, 0);
        String cor = ("(" + geo.getMaterial().getCor().getRed() + "," +
                geo.getMaterial().getCor().getGreen() + "," +
                geo.getMaterial().getCor().getBlue() + ")");

        jTablePropriedadesGeometria.setValueAt(cor, 3, 1);
        STL s = (STL) geo.getAtributos();
       
        float reference[] = geo.getAtributos().getReferencial();
         if (reference != null){
        jTablePropriedadesGeometria.setValueAt(" X:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(reference[0], 4, 1);
        jTablePropriedadesGeometria.setValueAt(" Y:", 5, 0);
        jTablePropriedadesGeometria.setValueAt(reference[1], 5, 1);
        jTablePropriedadesGeometria.setValueAt(" Z:", 6, 0);
        jTablePropriedadesGeometria.setValueAt(reference[2], 6, 1);
        }else{
             jTablePropriedadesGeometria.setValueAt(" X:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(0.0, 4, 1);
        jTablePropriedadesGeometria.setValueAt(" Y:", 5, 0);
        jTablePropriedadesGeometria.setValueAt(0.0, 5, 1);
        jTablePropriedadesGeometria.setValueAt(" Z:", 6, 0);
        jTablePropriedadesGeometria.setValueAt(0.0, 6, 1);
            
        }       
        
        jTablePropriedadesGeometria.setValueAt(" Visibilidade:", 7, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getVisibilidade()*100, 7, 1);
      
        
        if (geo.isVisible()) {
            checkPropriedadesVisible.setSelected(true);
        } else {
            checkPropriedadesVisible.setSelected(false);
        }

        if (geo.isSolid()) {
            checkPropriedadesSolid.setSelected(true);
        } else {
            checkPropriedadesSolid.setSelected(false);
        }

        jTablePropriedadesGeometria.updateUI();

    }

    /**
     * Seta Propriedades na tabela lateral do objeto Geometrya (Cone)
     * @param geo
     */
    private void setFieldsTableProCone(Geometria geo) {
        /* Mostra propriedades básicas da Geometria na tabela lateral */
        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getIdentificador(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Nome:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getNome(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" Material:", 2, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getMaterial().getNome(), 2, 1);
        jTablePropriedadesGeometria.setValueAt(" Cor:", 3, 0);
        Color cor = geo.getColor();
        String auxCor = "(" + cor.getRed() + "," + cor.getGreen() + "," + cor.getBlue() + ")";
        jTablePropriedadesGeometria.setValueAt(auxCor, 3, 1);
        Cone cone = (Cone) geo.getAtributos();
        jTablePropriedadesGeometria.setValueAt(" Altura:", 4, 0);
        jTablePropriedadesGeometria.setValueAt(cone.getAltura(), 4, 1);
        jTablePropriedadesGeometria.setValueAt(" Raio:", 5, 0);
        jTablePropriedadesGeometria.setValueAt(cone.getRaio(), 5, 1);
        float reference[] = geo.getAtributos().getReferencial();
        jTablePropriedadesGeometria.setValueAt(" X:", 6, 0);
        jTablePropriedadesGeometria.setValueAt(reference[0], 6, 1);
        jTablePropriedadesGeometria.setValueAt(" Y:", 7, 0);
        jTablePropriedadesGeometria.setValueAt(reference[1], 7, 1);
        jTablePropriedadesGeometria.setValueAt(" Z:", 8, 0);
        jTablePropriedadesGeometria.setValueAt(reference[2], 8, 1);

        jTablePropriedadesGeometria.setValueAt(" RotX:", 9, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotX(), 9, 1);
        jTablePropriedadesGeometria.setValueAt(" RotY:", 10, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotY(), 10, 1);
        jTablePropriedadesGeometria.setValueAt(" RotZ:", 11, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getRotZ(), 11, 1);
        jTablePropriedadesGeometria.setValueAt(" Visibilidade:", 12, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getVisibilidade() * 100, 12, 1);
        if (geo.isVisible()) {
            checkPropriedadesVisible.setSelected(true);
        } else {
            checkPropriedadesVisible.setSelected(false);
        }

        if (geo.isSolid()) {
            checkPropriedadesSolid.setSelected(true);
        } else {
            checkPropriedadesSolid.setSelected(false);
        }

        jTablePropriedadesGeometria.updateUI();

    }

    /**
     * Seta Propriedades na tabela lateral do objeto ListaGeometrias
     * @param geo
     */
    private void setFieldsTableProList(ListaGeometrias geo) {
        /* Mostra propriedades básicas da Lista de Geometrias na tabela lateral */

        jTablePropriedadesGeometria.setValueAt(" Id:", 0, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getId(), 0, 1);
        jTablePropriedadesGeometria.setValueAt(" Nome:", 1, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getName(), 1, 1);
        jTablePropriedadesGeometria.setValueAt(" Material:", 2, 0);
        if (geo.getMaterial() != null) {

            jTablePropriedadesGeometria.setValueAt(geo.getMaterial().getNome(), 2, 1);
        }
        jTablePropriedadesGeometria.setValueAt(" Visibilidade:", 3, 0);
        jTablePropriedadesGeometria.setValueAt(geo.getVisibilidade() * 100, 3, 1);

        if (listGeometry.isVisible()) {
            checkPropriedadesVisible.setSelected(true);
        } else {
            checkPropriedadesVisible.setSelected(false);
        }

        if (listGeometry.isSolid()) {
            checkPropriedadesSolid.setSelected(true);
        } else {
            checkPropriedadesSolid.setSelected(false);
        }

    }

    public void inicializeGLCanvas() {

        renderSide = new Render();
        renderSide.setVisao(0, 90, 0, 0, 0, -20);
        renderSide.rotacaoLimite(-22, 22, 68, 112, -22, 22);

        renderTop = new Render();
        renderTop.setVisao(0, 0, 0, 0, 0, -20);
        renderTop.rotacaoLimite(-22, 22, -22, 22, -360, 360);

        renderFront = new Render();
        renderFront.setVisao(-90, 0, 0, 0, 0, -20);
        renderFront.rotacaoLimite(-112, -68, -360, 360, -22, 22);

        renderPers = new Render();
        renderPers.setVisao(-70, 0, 0, 0, 0, -20);
        canvasSide = new GLCanvas();
        canvasTop = new GLCanvas();
        canvasFront = new GLCanvas();
        canvasPers = new GLCanvas();

        canvasSide.setPreferredSize(new Dimension(jScroolPaneGlCanvasSide.getWidth(),
                jScroolPaneGlCanvasSide.getHeight()));
        canvasFront.setPreferredSize(new Dimension(jScroolPaneGlCanvasFront.getWidth(),
                jScroolPaneGlCanvasFront.getHeight()));
        canvasPers.setPreferredSize(new Dimension(jScroolPaneGlCanvasPers.getWidth(),
                jScroolPaneGlCanvasPers.getHeight()));
        canvasTop.setPreferredSize(new Dimension(jScroolPaneGlCanvasTop.getWidth(),
                jScroolPaneGlCanvasTop.getHeight()));

        //canvasSide.setLocation(250, -250);
        //canvasSide.setFocusable(true);
        // canvasPers.setLocation(250, -250);
        //canvasPers.setFocusable(true);
        // canvasFront.setLocation(250, -250);
        //canvasFront.setFocusable(true);
        // canvasTop.setLocation(250, -250);
        //canvasTop.setFocusable(true);

        renderSide.setGLCanvas(canvasSide);
        renderTop.setGLCanvas(canvasTop);
        renderFront.setGLCanvas(canvasFront);
        renderPers.setGLCanvas(canvasPers);

        /* Cada numero identifica o GLCanvas */
        renderSide.setCanvasFocus(0);
        renderTop.setCanvasFocus(1);
        renderFront.setCanvasFocus(2);
        renderPers.setCanvasFocus(3);

        canvasSide.addGLEventListener(renderSide);
        canvasTop.addGLEventListener(renderTop);
        canvasFront.addGLEventListener(renderFront);
        canvasPers.addGLEventListener(renderPers);

        canvasTop.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseMoved(java.awt.event.MouseEvent evt) {
                topMouseMoved(evt);
            }
        });
        canvasTop.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseDragged(java.awt.event.MouseEvent evt) {
                topMouseMoved(evt);
            }
        });
        canvasTop.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseExited(java.awt.event.MouseEvent evt) {
                glCanvasMouseExited(evt);
            }
        });
        canvasTop.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                canvasKeyPressed(e);
            }
        });

        canvasSide.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseMoved(java.awt.event.MouseEvent evt) {
                sideMouseMoved(evt);
            }
        });
        canvasSide.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseDragged(java.awt.event.MouseEvent evt) {
                sideMouseMoved(evt);
            }
        });
        canvasSide.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseExited(java.awt.event.MouseEvent evt) {
                glCanvasMouseExited(evt);
            }
        });

        canvasFront.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseMoved(java.awt.event.MouseEvent evt) {
                frontMouseMoved(evt);
            }
        });
        canvasFront.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseDragged(java.awt.event.MouseEvent evt) {
                frontMouseMoved(evt);
            }
        });
        canvasFront.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseExited(java.awt.event.MouseEvent evt) {
                glCanvasMouseExited(evt);
            }
        });

        canvasPers.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseMoved(java.awt.event.MouseEvent evt) {
                persMouseMoved(evt);
            }
        });
        canvasPers.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {

            public void mouseDragged(java.awt.event.MouseEvent evt) {
                persMouseMoved(evt);
            }
        });
        canvasPers.addMouseListener(new java.awt.event.MouseAdapter() {

            public void mouseExited(java.awt.event.MouseEvent evt) {
                glCanvasMouseExited(evt);
            }
        });

        jScroolPaneGlCanvasSide.setViewportView(canvasSide);
        jScroolPaneGlCanvasTop.setViewportView(canvasTop);
        jScroolPaneGlCanvasFront.setViewportView(canvasFront);
        jScroolPaneGlCanvasPers.setViewportView(canvasPers);

        /* Adiciona Dominio Computacional quando o programa se inicia, 
         * assim, ele se torna o primeiro elemento da lista de Geometrias */
        // managementCore.getManagementTree().addGeometria(managementCore.getDominioComputacional());

        updateCanvas();

        canvasEixos = new GLCanvas();
        jScrollPaneEixos.setViewportView(canvasEixos);
        renderEixos = new RenderEixos(canvasEixos);
        canvasEixos.addGLEventListener(renderEixos);

//canvasSide.addGLEventListener(r);
//jMenuArquivo.getPopupMenu().setLightWeightPopupEnabled(false);
//jMenuEdit.getPopupMenu().setLightWeightPopupEnabled(false);
// Adiciona a variavel canvasSide ao Panel
    }

    private void topMouseMoved(java.awt.event.MouseEvent evt) {
        renderTop.calculaCoordenada(evt.getX(), evt.getY());
        double[] wcoord = renderTop.getWcoord();
        if (wcoord[3] == -1) {
            jLabelCoordenada.setText("");
        } else {
            jLabelCoordenada.setText(" X: " + nf.format(wcoord[0]) + " Y: " + nf.format(wcoord[1]));
        }
    }

    private void sideMouseMoved(java.awt.event.MouseEvent evt) {
        renderSide.calculaCoordenada(evt.getX(), evt.getY());
        double[] wcoord = renderSide.getWcoord();
        if (wcoord[3] == -1) {
            jLabelCoordenada.setText("");
        } else {
            jLabelCoordenada.setText(" Z: " + nf.format(wcoord[2]) + " Y: " + nf.format(wcoord[1]));
        }
    }

    private void frontMouseMoved(java.awt.event.MouseEvent evt) {
        renderFront.calculaCoordenada(evt.getX(), evt.getY());
        double[] wcoord = renderFront.getWcoord();
        if (wcoord[3] == -1) {
            jLabelCoordenada.setText("");
        } else {
            jLabelCoordenada.setText(" X: " + nf.format(wcoord[0]) + " Z: " + nf.format(wcoord[2]));
        }
    }

    private void persMouseMoved(java.awt.event.MouseEvent evt) {
        renderPers.calculaCoordenada(evt.getX(), evt.getY());
        double[] wcoord = renderPers.getWcoord();
        if (wcoord[3] == -1) {
            jLabelCoordenada.setText("");
        } else {
            jLabelCoordenada.setText(" X: " + nf.format(wcoord[0]) + " Y: " + nf.format(wcoord[1]));
        }
    }

    private void glCanvasMouseExited(java.awt.event.MouseEvent evt) {
        jLabelCoordenada.setText("");
    }

    /**
     * 
     * @return Vector ListaGeometrias
     */
    public Vector getArvoreGeometria() {
        return managementCore.getManagementTree().getListaGeometrias();
    }

    /**
     * Retorna Estrutura da Arvore que contem todas as Geometrias
     * @return Geometrias[]
     */
    public Geometria[] getGeometrias() {

        return managementCore.getManagementTree().getTodasGeometrias();

    }

    /**
     * Retorna um vetor de 2 elementos que contem 2 vértices:
     * vertexMaxMinCena[0]: Vertice do ponto maximo da cena
     * vertexMaxMinCena[1]: Vertice do ponto minimo da cena
     * @return Vertice[]
     */
    public Vertice[] getMaxMinCena() {
        return managementCore.getMaxMinCena();

    }

    /**
     * 
     * @param vFontes
     */
    public void carregarListaFontes(Vector vFontes) {
        managementCore.carregarListaFontes(vFontes);
        managementCore.getManagementTree().getTree().expandRow(3);
        if (!managementCore.getManagementTree().getListaFontes().isEmpty()) {

            if (status.setFonteSetada(true)) {
                btnGerarMalha.setEnabled(true);

            } else {
                btnGerarMalha.setEnabled(false);
            }

        }
        verificarStatusGeometria();
    }

    /**
     * Verifica o status da Geometria, caso exista Geometria na cena o status é true
     */
    private void verificarStatusGeometria() {
        boolean tempMaterial;
        Geometria[] vetorG = managementCore.getManagementTree().getTodasGeometrias();
        if (vetorG.length == 0) {
            status.setMaterialSetado(false);
            btnGerarMalha.setEnabled(status.setGeometriaInserida(false));
            btnSimularFDTD.setEnabled(status.isMalhaEfetuada());
        } else {
            tempMaterial = true;
            status.setGeometriaInserida(true);
            for (int i = 0; i <
                    vetorG.length; i++) {
                Geometria g = vetorG[i];

                if (g.getMaterial().getNome() == null) {
                    tempMaterial = false;
                    break;

                }
            }
            btnGerarMalha.setEnabled(status.setMaterialSetado(tempMaterial));
            btnSimularFDTD.setEnabled(status.isMalhaEfetuada());
            if (status.isMalhaEfetuada()) {
                statusPre.setForeground(new Color(0, 204, 102));
                statusPro.setForeground(new Color(255, 51, 51));
            }

        }

    }

    /*
     * Retorna Domínio Computacional 
     * @return DominioComputacional
     */
    public Geometria getDominioComputacional() {

        return managementCore.getDominioComputacional();

    }

    /**
     * Seta Domínio Computacional
     * @param dominio
     */
    public void setDominioComputacional(Geometria dominio) {
        managementCore.setDominioComputacional(dominio);

        float limiteX = Math.abs(
                managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0] -
                managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);

        float limiteY = Math.abs(
                managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1] -
                managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
        float fatorDivisaoGridX = limiteX / managementCore.getDominioComputacional().getAtributos().getDiscretizacaoX();
        float fatorDivisaoGridY = limiteY / managementCore.getDominioComputacional().getAtributos().getDiscretizacaoY();
//        System.out.println("fatorDivisaoX: " + fatorDivisaoGridX);
//        System.out.println("fatorDivisaoY: " + fatorDivisaoGridY);
//        
//        System.out.println("XgridInicio: " + managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
//        System.out.println("XgridFim: " + managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
//        
//        System.out.println("YgridInicio: " + managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
//        System.out.println("YgridFim: " + managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);

        renderSide.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
        renderSide.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
        renderSide.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
        renderSide.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
        renderSide.setFatorDivisaoGridX(fatorDivisaoGridX);
        renderSide.setFatorDivisaoGridY(fatorDivisaoGridY);

        renderTop.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
        renderTop.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
        renderTop.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
        renderTop.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
        renderTop.setFatorDivisaoGridX(fatorDivisaoGridX);
        renderTop.setFatorDivisaoGridY(fatorDivisaoGridY);

        renderFront.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
        renderFront.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
        renderFront.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
        renderFront.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
        renderFront.setFatorDivisaoGridX(fatorDivisaoGridX);
        renderFront.setFatorDivisaoGridY(fatorDivisaoGridY);

        renderPers.setXGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[0]);
        renderPers.setXGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[0]);
        renderPers.setYGridInicio(managementCore.getDominioComputacional().getAtributos().getFirsPoint()[1]);
        renderPers.setYGridFim(managementCore.getDominioComputacional().getAtributos().getSecondPoint()[1]);
        renderPers.setFatorDivisaoGridX(fatorDivisaoGridX);
        renderPers.setFatorDivisaoGridY(fatorDivisaoGridY);

        updateCanvas();
    }

    /**
     * Insere Lista de Geometrias na estrutura da árvore
     * @param list
     */
    public void inserirVectorListGeometry(Vector list) {
        managementCore.novaListaGeometrias(list);
        if (!managementCore.getManagementTree().getListaGeometrias().isEmpty()) {
            btnGerarMalha.setEnabled(status.setGeometriaInserida(true));
        }

        verificarStatusGeometria();
    }

    /**
     * Adiciona gráfico de pós-processamento ná arvore de simulação
     * @param Visualizador - v
     */
    public void addRelatorioNaArvore(Visualizador v) {

        managementCore.getManagementTree().addRelatorio(v);
    }
    
    /**
     * Recebe um Vector de relatorioPosProcessamento para ser adicionado a
     * arvore de objetos
     */
    public void addVectorPreRelatoriosNaArvore(Vector v){
        managementCore.getManagementTree().addVectorPreRelatorio(v, managementCore.getInterfaceServicos().getCaminhoResultadosProjeto());
    }

    /**
     * Retorna todos os relatórios gerados que estão na estrutura da árvore
     * @return
     */
    public Vector getListaRelatorios() {

        return managementCore.getManagementTree().getTodosRelatorios();
    }


    /**
     * Retorna todos os Pre Relatórios gerados que estão na estrutura da árvore
     * @return
     */
    public Vector getListaPreRelatorios() {

        return managementCore.getManagementTree().getTodosPreRelatorios();
    }

    public int getQuantidadeGeometrias() {
        return managementCore.getManagementTree().getQuantidadeGeometrias();
    }

     /**
     * Atualiza a visualização do eixos
     * @return
     */
    public void atualizaRotacaoEixos(){
        float[] visao = new float[6];
        if (focus == 0) {
            visao = renderSide.getVisao();
        } else if (focus == 1) {
            visao = renderTop.getVisao();
        } else if (focus == 2) {
            visao = renderFront.getVisao();
        } else if (focus == 3) {
            visao = renderPers.getVisao();
        }
        renderEixos.setRotacao(visao[0], visao[1], visao[2]);
    }
     public void canvasKeyPressed(KeyEvent e) {
        if (e.getKeyChar() == 'x' || e.getKeyChar() == 'X' ||
                e.getKeyChar() == 'y' || e.getKeyChar() == 'Y' ||
                e.getKeyChar() == 'z' || e.getKeyChar() == 'Z'){
            atualizaRotacaoEixos();
        } else if (e.getKeyChar() == 'e' || e.getKeyChar() == 'E') {
            if (focus == 0) {
                renderTop.setDesenharEixos(!renderSide.isEixosEnable());
                renderFront.setDesenharEixos(!renderSide.isEixosEnable());
                renderPers.setDesenharEixos(!renderSide.isEixosEnable());
            } else if (focus == 1) {
                renderSide.setDesenharEixos(!renderTop.isEixosEnable());
                renderFront.setDesenharEixos(!renderTop.isEixosEnable());
                renderPers.setDesenharEixos(!renderTop.isEixosEnable());
            } else if (focus == 2) {
                renderSide.setDesenharEixos(!renderFront.isEixosEnable());
                renderTop.setDesenharEixos(!renderFront.isEixosEnable());
                renderPers.setDesenharEixos(!renderFront.isEixosEnable());
            } else if (focus == 3) {
                renderSide.setDesenharEixos(!renderPers.isEixosEnable());
                renderTop.setDesenharEixos(!renderPers.isEixosEnable());
                renderFront.setDesenharEixos(!renderPers.isEixosEnable());
            }
        } else if (e.getKeyChar() == 'g' || e.getKeyChar() == 'G') {
            if (focus == 0) {
                renderTop.setDesenharGrid(!renderSide.isGridEnable());
                renderFront.setDesenharGrid(!renderSide.isGridEnable());
                renderPers.setDesenharGrid(!renderSide.isGridEnable());
            } else if (focus == 1) {
                renderSide.setDesenharGrid(!renderTop.isGridEnable());
                renderFront.setDesenharGrid(!renderTop.isGridEnable());
                renderPers.setDesenharGrid(!renderTop.isGridEnable());
            } else if (focus == 2) {
                renderSide.setDesenharGrid(!renderFront.isGridEnable());
                renderTop.setDesenharGrid(!renderFront.isGridEnable());
                renderPers.setDesenharGrid(!renderFront.isGridEnable());
            } else if (focus == 3) {
                renderSide.setDesenharGrid(!renderPers.isGridEnable());
                renderTop.setDesenharGrid(!renderPers.isGridEnable());
                renderFront.setDesenharGrid(!renderPers.isGridEnable());
            }
        }
    }

    private void setControleMousePressed(boolean controle, JButton component){
        this.controleMousePressed = controle;
        this.jButtonMousePressed = component;
        if (controle){
            thread = new Thread(new ThreadMousePressed());
            thread.start();
        }else{
            thread.interrupt();
        }
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton bntRotRightY;
    private javax.swing.JButton btnAbrir;
    private javax.swing.JButton btnAddBrick;
    private javax.swing.JButton btnAddCone;
    private javax.swing.JButton btnAddCylinder;
    private javax.swing.JButton btnAddFonte;
    private javax.swing.JButton btnAddListGeometria;
    private javax.swing.JButton btnAddMalhaPronta;
    private javax.swing.JButton btnAddRelatoriosPos;
    private javax.swing.JButton btnAddSphere;
    private javax.swing.JButton btnAlterarDominio;
    private javax.swing.JButton btnAlterarGrid;
    private javax.swing.JButton btnColar;
    private javax.swing.JButton btnCopiar;
    private javax.swing.JButton btnFEM;
    private javax.swing.JButton btnGerarMalha;
    private javax.swing.JButton btnImpStl;
    private javax.swing.JButton btnMoverBaixo;
    private javax.swing.JButton btnMoverCima;
    private javax.swing.JButton btnMoverDireita;
    private javax.swing.JButton btnMoverEsquerda;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnRecortar;
    private javax.swing.JButton btnRemObj;
    private javax.swing.JButton btnRotDonwX;
    private javax.swing.JButton btnRotLeftY;
    private javax.swing.JButton btnRotUpX;
    private javax.swing.JButton btnRotZMais;
    private javax.swing.JButton btnRotZMenos;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JButton btnSimularFDTD;
    private javax.swing.JButton btnZoomMais;
    private javax.swing.JButton btnZoomMenos;
    private javax.swing.JCheckBox checkPropriedadesSolid;
    private javax.swing.JCheckBox checkPropriedadesVisible;
    private javax.swing.JLabel jLabelCoordenada;
    private javax.swing.JLabel jLabelStatus;
    private javax.swing.JLabel jLabelStatus0;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenu jMenu3;
    private javax.swing.JMenu jMenu4;
    private javax.swing.JMenu jMenu5;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuBar jMenuBar2;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanelTree;
    private javax.swing.JPopupMenu jPopupMenuGeometrias;
    private javax.swing.JPopupMenu jPopupMenuListaGeometrias;
    private javax.swing.JPopupMenu jPopupMenuPreRelatorios;
    private javax.swing.JPopupMenu jPopupMenuRelatorios;
    private javax.swing.JScrollPane jScrollPaneEixos;
    private javax.swing.JScrollPane jScrollPaneMateriais;
    public javax.swing.JScrollPane jScrollPaneTree;
    private javax.swing.JScrollPane jScroolPaneGlCanvasFront;
    private javax.swing.JScrollPane jScroolPaneGlCanvasPers;
    private javax.swing.JScrollPane jScroolPaneGlCanvasSide;
    private javax.swing.JScrollPane jScroolPaneGlCanvasTop;
    private javax.swing.JScrollPane jScroolPanePropriedades;
    private javax.swing.JToolBar.Separator jSeparator1;
    private javax.swing.JToolBar.Separator jSeparator2;
    private javax.swing.JToolBar.Separator jSeparator3;
    private javax.swing.JToolBar.Separator jSeparator4;
    private javax.swing.JToolBar.Separator jSeparator5;
    private javax.swing.JToolBar.Separator jSeparator6;
    private javax.swing.JToolBar.Separator jSeparator7;
    private javax.swing.JToolBar.Separator jSeparator8;
    private javax.swing.JSplitPane jSplitPaneLeft;
    private javax.swing.JSplitPane jSplitPaneRight;
    private javax.swing.JSplitPane jSplitPaneRightScene;
    private javax.swing.JSplitPane jSplitPaneTreeScene;
    private javax.swing.JTable jTablePropriedadesGeometria;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JToolBar jToolBarAcessorios;
    private javax.swing.JToolBar jToolBarGeometrias;
    private javax.swing.JMenuItem menuItemColarLista;
    private javax.swing.JMenuItem menuItemCopiar;
    private javax.swing.JMenuItem menuItemDeletar;
    private javax.swing.JMenuItem menuItemDeletarLista;
    private javax.swing.JMenuItem menuItemDeletarPreRelatorio;
    private javax.swing.JMenuItem menuItemDeletarRelatorio;
    private javax.swing.JMenuItem menuItemEditar;
    private javax.swing.JMenuItem menuItemEditarLista;
    private javax.swing.JMenuItem menuItemEditarPreRelatorio;
    private javax.swing.JMenuItem menuItemEditarRelatorio;
    private javax.swing.JMenuItem menuItemExecutarRelatorios;
    private javax.swing.JLabel statusPos;
    private javax.swing.JLabel statusPre;
    private javax.swing.JLabel statusPro;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables
    private GerenciamentoNucleo managementCore;
    private GLCanvas canvasSide;
    private GLCanvas canvasTop;
    private GLCanvas canvasPers;
    private GLCanvas canvasFront;
    private GLCanvas canvasEixos;
    private DefaultMutableTreeNode selectedNode;
    private Object objSelecionado;
    private Geometria geo;
    private Geometria copia;
    private Render renderSide = new Render();
    private Render renderTop = new Render();
    private Render renderFront = new Render();
    private Render renderPers = new Render();
    private RenderEixos renderEixos;
    private ListaGeometrias listGeometry;
    private TreePath path;
    private static Status status = new Status();
    private int focus = 1;
    private int clickMouse;
    private float rotacao = 1.0f;
     private float translacao = 1.0f;
    private VerificarStatus verificarStatus;
    private Toolkit toolkit; 
    private Timer timer = new Timer();
    private NumberFormat nf;
    private boolean controleMousePressed = false;
    private JButton jButtonMousePressed;
    Thread thread;
    private boolean timerIniciado = false;

    //Thread utilizada para invocar os eventos de rotacao e translado enquanto o
    //botao estiver prescionado
    class ThreadMousePressed implements Runnable {
        @Override
        public void run() {
            while(controleMousePressed){
                try {
                    Thread.sleep(50);
                    //invoca evento actionPerformed do JButton
                    jButtonMousePressed.getActionListeners()[0].actionPerformed(null);
                } catch (InterruptedException ex) {
                    try {
                        this.finalize();
                    } catch (Throwable ex1) {
                    }
                }
            }
        }
    }
}